<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-05T00:26:44.322104" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-scale.txt">
<suite id="s1-s1" name="Ready" source="/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/suites/netconf/ready">
<suite id="s1-s1-s1" name="Netconfready" source="/w/workspace/netconf-csit-1node-scale-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-04-05T00:26:44.974778" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:44.970367" elapsed="0.004477"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-05T00:26:44.969897" elapsed="0.005031"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.980182" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:44.976370" elapsed="0.003845"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:44.980478" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:44.980353" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:44.980319" elapsed="0.000234"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.981149" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:44.980743" elapsed="0.000464"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.981730" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:44.981381" elapsed="0.000380"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-05T00:26:44.982327" elapsed="0.000294"/>
</kw>
<msg time="2026-04-05T00:26:44.982747" level="INFO">${status} = PASS</msg>
<msg time="2026-04-05T00:26:44.982797" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:44.981938" elapsed="0.000883"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.983397" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:44.982998" elapsed="0.000427"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.985090" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:44.984801" elapsed="0.000318"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.985665" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:44.985270" elapsed="0.000423"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.986210" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:44.985859" elapsed="0.000379"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:44.988905" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:44.988621" elapsed="0.000361"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-05T00:26:44.986301" elapsed="0.002712"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.989592" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:44.989180" elapsed="0.000471"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.990219" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:44.989817" elapsed="0.000446"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.990837" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:44.990421" elapsed="0.000461"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-05T00:26:44.984304" elapsed="0.006639"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-05T00:26:44.975976" elapsed="0.015025"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:44.991187" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:44.991069" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:44.991049" elapsed="0.000213"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.994443" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:44.994058" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:44.995019" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:44.994721" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:44.995091" elapsed="0.000045"/>
</return>
<msg time="2026-04-05T00:26:44.995269" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:44.993715" elapsed="0.001579"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:44.995658" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:44.995466" elapsed="0.000255"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:44.995348" elapsed="0.000400"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-05T00:26:44.991493" elapsed="0.004310"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-05T00:26:44.995956" elapsed="0.000210"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:44.996512" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:44.996374" elapsed="0.000202"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:44.996218" elapsed="0.000385"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-05T00:26:44.975323" elapsed="0.021353"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:44.999302" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:44.999189" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:44.999170" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:45.004136" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:45.004026" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:45.004007" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.005205" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:45.004818" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.005694" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:45.005390" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:45.005764" elapsed="0.000030"/>
</return>
<msg time="2026-04-05T00:26:45.005919" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:45.004461" elapsed="0.001482"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:45.006300" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:45.006547" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:45.006399" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:45.006382" elapsed="0.000241"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:45.006159" elapsed="0.000502"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:45.006000" elapsed="0.000689"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-05T00:26:45.003741" elapsed="0.003004"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-05T00:26:44.997260" elapsed="0.009540"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:44.996830" elapsed="0.010016"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-05T00:26:44.969515" elapsed="0.037379"/>
</kw>
<kw name="Set_Netconf_Connector">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.008458" 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-04-05T00:26:45.008158" elapsed="0.000327"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.010840" 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-04-05T00:26:45.008699" elapsed="0.002168"/>
</kw>
<return>
<value>${connector}</value>
<status status="PASS" start="2026-04-05T00:26:45.010919" elapsed="0.000030"/>
</return>
<msg time="2026-04-05T00:26:45.011073" 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-04-05T00:26:45.007112" elapsed="0.003985"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.015848" 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-04-05T00:26:45.011255" elapsed="0.004639"/>
</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-04-05T00:26:45.016051" elapsed="0.000226"/>
</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-04-05T00:26:45.030851" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:45.030736" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:45.030717" elapsed="0.000206"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-05T00:26:45.031268" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-05T00:26:45.031079" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.031836" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-05T00:26:45.031558" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-05T00:26:45.032291" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-05T00:26:45.032035" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-05T00:26:45.033106" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-05T00:26:45.032865" elapsed="0.000413">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-05T00:26:45.033396" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-05T00:26:45.033442" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:45.032492" elapsed="0.000973"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:45.033786" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:45.033541" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:45.033522" elapsed="0.000363"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-05T00:26:45.034624" level="FAIL">Dictionary does not contain key '1'.</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="FAIL" start="2026-04-05T00:26:45.034350" elapsed="0.000395">Dictionary does not contain key '1'.</status>
</kw>
<return>
<value>${ip_address}</value>
<status status="NOT RUN" start="2026-04-05T00:26:45.034809" elapsed="0.000019"/>
</return>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="FAIL" start="2026-04-05T00:26:45.034083" elapsed="0.000849">Dictionary does not contain key '1'.</status>
</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="NOT RUN" start="2026-04-05T00:26:45.035099" elapsed="0.000021"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:45.035282" elapsed="0.000020"/>
</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="NOT RUN" start="2026-04-05T00:26:45.035443" elapsed="0.000020"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<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="NOT RUN" start="2026-04-05T00:26:45.035610" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:45.038803" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:45.039273" elapsed="0.000158"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-05T00:26:45.039579" elapsed="0.000118"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-05T00:26:45.036436" elapsed="0.003313"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-05T00:26:45.035900" elapsed="0.003934"/>
</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="FAIL" start="2026-04-05T00:26:45.029009" elapsed="0.010908">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.059913" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.059763" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.059730" elapsed="0.000274"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.060441" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-05T00:26:46.060181" elapsed="0.000419"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.061155" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-05T00:26:46.060780" elapsed="0.000421"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.061607" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-05T00:26:46.061356" elapsed="0.000313"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-05T00:26:46.062489" level="FAIL">Dictionary does not contain key '1'.</msg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.062245" elapsed="0.000368">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-05T00:26:46.062749" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-05T00:26:46.062795" level="INFO">${old_connection_index} = Dictionary does not contain key '1'.</msg>
<var>${status}</var>
<var>${old_connection_index}</var>
<arg>Get From Dictionary</arg>
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.061836" elapsed="0.000982"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.063127" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.062894" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.062875" elapsed="0.000351"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-05T00:26:46.064001" level="FAIL">Dictionary does not contain key '1'.</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="FAIL" start="2026-04-05T00:26:46.063719" elapsed="0.000388">Dictionary does not contain key '1'.</status>
</kw>
<return>
<value>${ip_address}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.064167" elapsed="0.000017"/>
</return>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.063430" elapsed="0.000874">Dictionary does not contain key '1'.</status>
</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="NOT RUN" start="2026-04-05T00:26:46.064472" elapsed="0.000022"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.064665" elapsed="0.000022"/>
</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="NOT RUN" start="2026-04-05T00:26:46.064828" elapsed="0.000019"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<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="NOT RUN" start="2026-04-05T00:26:46.064994" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.068259" elapsed="0.000316"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.068754" elapsed="0.000164"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-05T00:26:46.069067" elapsed="0.000104"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-05T00:26:46.065820" elapsed="0.003402"/>
</kw>
<arg>'${IS_KARAF_APPL}' == 'True'</arg>
<arg>SSHKeywords.Restore_Current_Ssh_Connection_From_Index</arg>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-05T00:26:46.065270" elapsed="0.003997"/>
</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="FAIL" start="2026-04-05T00:26:46.057922" elapsed="0.011425">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-05T00:26:46.069497" level="FAIL">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</msg>
<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="FAIL" start="2026-04-05T00:26:45.016444" elapsed="1.053156">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</kw>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<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="NOT RUN" start="2026-04-05T00:26:46.074255" elapsed="0.000030"/>
</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-04-05T00:26:46.074715" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.074356" elapsed="0.000430"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.074338" elapsed="0.000484"/>
</if>
<kw name="Create Session" owner="RequestsLibrary">
<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="NOT RUN" start="2026-04-05T00:26:46.075021" elapsed="0.000033"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.075334" elapsed="0.000027"/>
</kw>
<doc>Initialize SetupUtils. Setup requests library and log into karaf.log that the netconf readiness wait starts.</doc>
<status status="FAIL" start="2026-04-05T00:26:44.969118" elapsed="1.106362">Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</kw>
<test id="s1-s1-s1-t1" name="Check_Whether_Netconf_Topology_Is_Ready" line="84">
<doc>Checks netconf readiness.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.075570" elapsed="0.000592">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-s1-t2" name="Wait_For_Netconf_Connector" line="97">
<doc>Wait for the Netconf to go up for configurable time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-05T00:26:46.076521" elapsed="0.000462">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-s1-t3" name="Wait_Even_Longer" line="105">
<doc>Bugs such as 7175 may require to wait longer till netconf-connector works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-05T00:26:46.077265" elapsed="0.000468">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-s1-t4" name="Check_For_Bug_5014" line="114">
<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="FAIL" start="2026-04-05T00:26:46.078002" elapsed="0.001095">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-s1-t5" name="Check_Whether_Netconf_Can_Pretty_Print" line="132">
<doc>Make one request to netconf-connector and see if it works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-05T00:26:46.079289" elapsed="0.000464">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-s1-t6" name="Wait_For_MDSAL" line="141">
<doc>Wait for the MDSAL feature to become online</doc>
<status status="FAIL" start="2026-04-05T00:26:46.079934" elapsed="0.000352">Parent suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</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-04-05T00:26:46.087883" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.087765" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.087745" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.089015" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.088584" elapsed="0.000460"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.089510" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.089205" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.089581" elapsed="0.000035"/>
</return>
<msg time="2026-04-05T00:26:46.089763" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.088204" elapsed="0.001584"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.090162" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.090411" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.090261" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.090244" elapsed="0.000288"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.090016" elapsed="0.000544"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.089848" elapsed="0.000741"/>
</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-04-05T00:26:46.085714" elapsed="0.004945"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.090895" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-05T00:26:46.090811" elapsed="0.000137"/>
</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-04-05T00:26:46.080829" elapsed="0.010170"/>
</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-04-05T00:26:44.364411" elapsed="1.726619">Suite setup failed:
Keyword 'KarafKeywords.Open_Controller_Karaf_Console_On_Background' failed after retrying 2 times. The last error was: Dictionary does not contain key '1'.</status>
</suite>
<status status="FAIL" start="2026-04-05T00:26:44.363165" elapsed="1.728699"/>
</suite>
<suite id="s1-s2" name="Performance" source="/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/suites/netconf/restperfclient/performance.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.189934" level="INFO">${value} = 1658.4</msg>
<var>${value}</var>
<arg>${REQUEST_COUNT}/10+20</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-05T00:26:46.189478" elapsed="0.000488"/>
</kw>
<kw name="Set_User_Configurable_Variable_Default" owner="Utils">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.203032" level="INFO">${value} = 1658.4 s</msg>
<var>${value}</var>
<arg>\${${name}}</arg>
<arg>${value}</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.198725" elapsed="0.004336"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.203626" level="INFO">${TESTTOOL_DEVICE_TIMEOUT} = 1658.4 s</msg>
<arg>\${${name}}</arg>
<arg>${value}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.203236" elapsed="0.000450"/>
</kw>
<arg>TESTTOOL_DEVICE_TIMEOUT</arg>
<arg>${value} s</arg>
<doc>Set a default value for an user configurable variable.
This keyword is needed if your default value is calculated using
a complex expression which needs BuiltIn.Evaluate or even more
complex keywords. It sets the variable ${name} (the name of the
variable MUST be specified WITHOUT the ${} syntactic sugar due
to limitations of Robot Framework) to 1658.4 but only if the
variable ${name} was not set previously. This keyword is intended
for user configurable variables which are supposed to be set only
with pybot -v; calling this keyword on a variable that was already
set by another keyword will silently turn the call into a NOP and
thus is a bug in the suite or resource trying to call this
keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.198380" elapsed="0.005367"/>
</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-04-05T00:26:46.208888" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.204633" elapsed="0.004302"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-05T00:26:46.204409" elapsed="0.004585"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.213966" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.210110" elapsed="0.003885"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.214189" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.214079" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.214056" elapsed="0.000202"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.214783" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.214413" elapsed="0.000414"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.215382" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.215065" 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-04-05T00:26:46.215937" elapsed="0.000309"/>
</kw>
<msg time="2026-04-05T00:26:46.216352" level="INFO">${status} = PASS</msg>
<msg time="2026-04-05T00:26:46.216399" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.215578" elapsed="0.000845"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.217001" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.216593" elapsed="0.000435"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.218041" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.217775" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.218470" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.218216" elapsed="0.000280"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.218961" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.218668" elapsed="0.000321"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.221725" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.221514" elapsed="0.000287"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.219050" elapsed="0.002780"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.222399" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.221993" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.223055" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.222619" elapsed="0.000480"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.223662" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.223263" elapsed="0.000442"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-05T00:26:46.217309" elapsed="0.006453"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.209746" elapsed="0.014073"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.223995" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.223883" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.223865" elapsed="0.000195"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.227193" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.226813" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.227681" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.227379" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.227752" elapsed="0.000039"/>
</return>
<msg time="2026-04-05T00:26:46.227917" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.226464" elapsed="0.001478"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.228322" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.228108" elapsed="0.000277"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.227995" elapsed="0.000416"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-05T00:26:46.224310" elapsed="0.004154"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-05T00:26:46.228618" elapsed="0.000227"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.229169" elapsed="0.000058"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.229030" elapsed="0.000243"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.228901" elapsed="0.000400"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-05T00:26:46.209286" elapsed="0.020070"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.232076" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.231966" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.231948" elapsed="0.000197"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.237039" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.236920" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.236903" elapsed="0.000205"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.238084" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.237692" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.238579" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.238271" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.238669" elapsed="0.000030"/>
</return>
<msg time="2026-04-05T00:26:46.238825" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.237337" elapsed="0.001513"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.239190" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.239431" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.239286" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.239270" elapsed="0.000236"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.239048" elapsed="0.000482"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.238902" elapsed="0.000653"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-05T00:26:46.236618" elapsed="0.003000"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-05T00:26:46.229947" elapsed="0.009754"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.229507" elapsed="0.010237"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.203967" elapsed="0.035827"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.240677" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.240386" elapsed="0.000319"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.245171" 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-04-05T00:26:46.240865" elapsed="0.004362"/>
</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-04-05T00:26:46.249712" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7dabd51e53d0&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-04-05T00:26:46.249248" elapsed="0.000649"/>
</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-04-05T00:26:46.248831" elapsed="0.001137"/>
</kw>
<status status="PASS" start="2026-04-05T00:26:46.245309" elapsed="0.004692"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.245290" elapsed="0.004736"/>
</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-04-05T00:26:46.255481" level="INFO">${odl_connection} = 1</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.255056" elapsed="0.000452"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.257396" level="INFO">Length is 0.</msg>
<msg time="2026-04-05T00:26:46.257477" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-05T00:26:46.256899" elapsed="0.000602"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.257682" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.258885" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-05T00:26:46.259498" level="FAIL">OSError: [Errno 16] Device or resource busy</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="FAIL" start="2026-04-05T00:26:46.258539" elapsed="0.003844">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.262446" 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="FAIL" start="2026-04-05T00:26:46.258181" elapsed="0.004323"/>
</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="FAIL" start="2026-04-05T00:26:46.256449" elapsed="0.006171">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.262686" 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="FAIL" start="2026-04-05T00:26:46.256040" elapsed="0.006695"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.255706" elapsed="0.007123">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.262879" elapsed="0.000018"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.254682" elapsed="0.008301">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.263198" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.263369" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.263495" elapsed="0.001275"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.263457" elapsed="0.001345"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.263434" elapsed="0.001391"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.268975" elapsed="0.000029"/>
</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="FAIL" start="2026-04-05T00:26:46.250283" elapsed="0.018814">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.240048" elapsed="0.029137">OSError: [Errno 16] Device or resource busy</status>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<kw name="Setup_Restperfclient" owner="RestPerfClient">
<arg>build_version=${NETCONF_TESTTOOL_VERSION}</arg>
<arg>build_location=org/opendaylight/netconf</arg>
<doc>Deploy RestPerfClient and determine the Java command to use to call it.
Open a SSH connection through which the RestPerfClient will be
invoked, deploy RestPerfClient and the data files it needs to do
its work and initialize the internal state for the remaining
keywords.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.269533" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.269256" elapsed="0.000341"/>
</branch>
<branch type="ELSE">
<kw name="Setup_Restperfclient" owner="RestPerfClient">
<doc>Deploy RestPerfClient and determine the Java command to use to call it.
Open a SSH connection through which the RestPerfClient will be
invoked, deploy RestPerfClient and the data files it needs to do
its work and initialize the internal state for the remaining
keywords.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.269900" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.269622" elapsed="0.000333"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.269238" elapsed="0.000739"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<var>${testtool}</var>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.274110" elapsed="0.000029"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${testtool}</arg>
<arg>${testtool}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.274307" elapsed="0.000022"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.274487" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.274683" elapsed="0.000021"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.189185" elapsed="0.085605">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s2-t1" name="Start_Testtool" line="47">
<doc>Deploy and start test tool, then wait for all its devices to become online.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.274868" elapsed="0.000433">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t2" name="Configure_Device_On_Netconf" line="64">
<doc>Configure the testtool device on Netconf connector.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.275493" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t3" name="Wait_For_Device_To_Become_Connected" line="68">
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.276050" elapsed="0.000397">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t4" name="Create_Device_Data" line="72">
<doc>Send some sample test data into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.276669" elapsed="0.000365">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t5" name="Run_Restperfclient" line="79">
<doc>Deploy and execute restperfclient, asking it to send the specified amount of requests to the netconf connector of the device.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.277203" elapsed="0.000425">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t6" name="Check_For_Failed_Requests" line="85">
<doc>Make sure there are no failed requests in the restperfclient log.
This is a separate test case to distinguish between restperfclient
failure and failed requests. Failed requests are rejected because
we don't want to test performance of ODL rejecting our requests.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.277810" elapsed="0.000660">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t7" name="Cleanup_And_Collect" line="97">
<doc>Deconfigure the testtool device on Netconf connector.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.278656" elapsed="0.000326">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.279676" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-05T00:26:46.279582" elapsed="0.000169"/>
</kw>
<kw name="Teardown_Restperfclient" owner="RestPerfClient">
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.284055" level="FAIL">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</msg>
<arg>${RestPerfClient__restperfclient}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.280156" elapsed="0.003937">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-05T00:26:46.284276" elapsed="0.000110"/>
</kw>
<doc>Free resources allocated during the RestPerfClient setup</doc>
<status status="FAIL" start="2026-04-05T00:26:46.279947" elapsed="0.004541">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.288579" level="FAIL">Variable '${testtool}' not found.</msg>
<arg>${testtool}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.284656" elapsed="0.003958">Variable '${testtool}' not found.</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.289997" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-05T00:26:46.289681" elapsed="0.000344"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.290347" level="FAIL">No open connection.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.290176" elapsed="0.000754">No open connection.</status>
</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="FAIL" start="2026-04-05T00:26:46.289461" elapsed="0.001592">No open connection.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.291384" level="FAIL">No open connection.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.291214" elapsed="0.000392">No open connection.</status>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.295918" level="FAIL">Variable '${testtool_log}' not found.</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.291787" elapsed="0.004164">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.289207" elapsed="0.006868">Several failures occurred:

1) No open connection.

2) No open connection.

3) Variable '${testtool_log}' not found.</status>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.288797" elapsed="0.007331"/>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.279363" elapsed="0.016884">Several failures occurred:

1) Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}

2) Variable '${testtool}' not found.</status>
</kw>
<doc>netconf-restperfclient Update performance test suite.

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

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


Perform given count of update operations on device data mounted onto a
netconf connector (using the netconf-testtool-restperfclient tool) and
see how much time it took. More exactly, it sends the data to a restconf
mountpoint of the netconf connector belonging to the device, which turns
out to turn the first request sent to a "create" request and the
remaining requests to "update" requests (due to how the testtool device
behavior is implemented).</doc>
<status status="FAIL" start="2026-04-05T00:26:46.092358" elapsed="0.203965">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}

2) Variable '${testtool}' not found.</status>
</suite>
<suite id="s1-s3" name="Mdsal" source="/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/suites/netconf/restperfclient/mdsal.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.384252" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.379962" elapsed="0.004342"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-05T00:26:46.379736" elapsed="0.004639"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.389273" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.385506" elapsed="0.003795"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.389541" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.389381" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.389360" elapsed="0.000251"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.390142" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.389781" elapsed="0.000405"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.390679" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.390350" elapsed="0.000356"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-05T00:26:46.391218" elapsed="0.000283"/>
</kw>
<msg time="2026-04-05T00:26:46.391602" level="INFO">${status} = PASS</msg>
<msg time="2026-04-05T00:26:46.391665" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.390873" elapsed="0.000817"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.392277" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.391862" elapsed="0.000444"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.393332" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.393065" elapsed="0.000294"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.393787" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.393511" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.394268" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.393973" elapsed="0.000352"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.397043" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.396841" elapsed="0.000278"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.394388" elapsed="0.002760"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.397734" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.397310" elapsed="0.000469"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.398349" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.397944" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.398960" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.398555" elapsed="0.000447"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-05T00:26:46.392582" elapsed="0.006479"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.385166" elapsed="0.013951"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.399297" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.399184" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.399165" elapsed="0.000198"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.402527" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.402138" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.403027" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.402733" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.403097" elapsed="0.000035"/>
</return>
<msg time="2026-04-05T00:26:46.403260" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.401799" elapsed="0.001486"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.403626" elapsed="0.000041"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.403446" elapsed="0.000257"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.403337" elapsed="0.000393"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-05T00:26:46.399590" elapsed="0.004233"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-05T00:26:46.403981" elapsed="0.000214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.404555" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.404413" elapsed="0.000213"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.404289" elapsed="0.000396"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-05T00:26:46.384726" elapsed="0.020038"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.407383" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.407275" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.407257" elapsed="0.000193"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.412235" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.412098" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.412080" elapsed="0.000234"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.413268" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.412890" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.413755" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.413454" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.413825" elapsed="0.000028"/>
</return>
<msg time="2026-04-05T00:26:46.413977" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.412545" elapsed="0.001456"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.414338" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.414583" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.414434" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.414418" elapsed="0.000256"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.414197" elapsed="0.000501"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.414051" elapsed="0.000673"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-05T00:26:46.411813" elapsed="0.002987"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-05T00:26:46.405353" elapsed="0.009524"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.404926" elapsed="0.010002"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.379404" elapsed="0.035574"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.415782" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.415493" elapsed="0.000316"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.419982" 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-04-05T00:26:46.415972" elapsed="0.004057"/>
</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-04-05T00:26:46.424466" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7dabd5286550&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-04-05T00:26:46.424014" elapsed="0.000604"/>
</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-04-05T00:26:46.423558" elapsed="0.001148"/>
</kw>
<status status="PASS" start="2026-04-05T00:26:46.420100" elapsed="0.004638"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.420083" elapsed="0.004680"/>
</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-04-05T00:26:46.430052" level="INFO">${odl_connection} = 2</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.429619" elapsed="0.000461"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.431781" level="INFO">Length is 0.</msg>
<msg time="2026-04-05T00:26:46.431861" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-05T00:26:46.431465" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.432047" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.433290" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-05T00:26:46.433585" level="FAIL">OSError: [Errno 16] Device or resource busy</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="FAIL" start="2026-04-05T00:26:46.432966" elapsed="0.001107">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.434132" 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="FAIL" start="2026-04-05T00:26:46.432586" elapsed="0.001598"/>
</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="FAIL" start="2026-04-05T00:26:46.431017" elapsed="0.003278">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.434345" 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="FAIL" start="2026-04-05T00:26:46.430601" elapsed="0.003792"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.430266" elapsed="0.004223">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.434539" elapsed="0.000019"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.429274" elapsed="0.005381">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.434827" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.435017" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.435175" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.435136" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.435116" elapsed="0.000119"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.439758" elapsed="0.000030"/>
</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="FAIL" start="2026-04-05T00:26:46.425074" elapsed="0.014806">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.415226" elapsed="0.024741">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Setup_Restperfclient" owner="RestPerfClient">
<doc>Deploy RestPerfClient and determine the Java command to use to call it.
Open a SSH connection through which the RestPerfClient will be
invoked, deploy RestPerfClient and the data files it needs to do
its work and initialize the internal state for the remaining
keywords.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.440317" elapsed="0.000029"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.440517" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.440727" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${value}</var>
<arg>${REQUEST_COUNT}/50+10</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.440899" elapsed="0.000020"/>
</kw>
<kw name="Set_User_Configurable_Variable_Default" owner="Utils">
<arg>DIRECT_MDSAL_TIMEOUT</arg>
<arg>${value} s</arg>
<doc>Set a default value for an user configurable variable.
This keyword is needed if your default value is calculated using
a complex expression which needs BuiltIn.Evaluate or even more
complex keywords. It sets the variable ${name} (the name of the
variable MUST be specified WITHOUT the ${} syntactic sugar due
to limitations of Robot Framework) to ${value} but only if the
variable ${name} was not set previously. This keyword is intended
for user configurable variables which are supposed to be set only
with pybot -v; calling this keyword on a variable that was already
set by another keyword will silently turn the call into a NOP and
thus is a bug in the suite or resource trying to call this
keyword.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.452721" elapsed="0.000031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${value}</var>
<arg>${REQUEST_COUNT}/10+20</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.452946" elapsed="0.000028"/>
</kw>
<kw name="Set_User_Configurable_Variable_Default" owner="Utils">
<arg>NETCONF_CONNECTOR_MDSAL_TIMEOUT</arg>
<arg>${value} s</arg>
<doc>Set a default value for an user configurable variable.
This keyword is needed if your default value is calculated using
a complex expression which needs BuiltIn.Evaluate or even more
complex keywords. It sets the variable ${name} (the name of the
variable MUST be specified WITHOUT the ${} syntactic sugar due
to limitations of Robot Framework) to ${value} but only if the
variable ${name} was not set previously. This keyword is intended
for user configurable variables which are supposed to be set only
with pybot -v; calling this keyword on a variable that was already
set by another keyword will silently turn the call into a NOP and
thus is a bug in the suite or resource trying to call this
keyword.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.465110" elapsed="0.000030"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.379112" elapsed="0.086180">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s3-t1" name="Create_Test_Data_For_Direct_Access" line="45">
<doc>Send some sample test data into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.465388" elapsed="0.000511">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t2" name="Run_RestPerfClient_Directly_On_MDSAL" line="49">
<doc>Deploy and execute restperfclient, asking it to send the specified amount of requests to the MDSAL via Restconf.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.466092" elapsed="0.000473">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t3" name="Check_For_Failed_Direct_MDSAL_Requests" line="54">
<doc>Make sure there are no failed requests in the restperfclient log.
This is a separate test case to distinguish between restperfclient
failure and failed requests. Failed requests are rejected because
we don't want to test performance of ODL rejecting our requests.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.466757" elapsed="0.000704">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t4" name="Cleanup_And_Collect_For_Direct_Access" line="67">
<doc>Cleanup the test data produced by the direct MDSAL access.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.467630" elapsed="0.000423">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t5" name="Create_Test_Data_For_Connector_Access" line="73">
<doc>Create the test data container again so it is ready for the netconf connector test.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.468252" elapsed="0.000470">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t6" name="Configure_ODL_As_A_Device_On_Netconf" line="78">
<doc>Configure ODL MDSAL Northbound as a Netconf device on a Netconf connector.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.468957" elapsed="0.000445">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t7" name="Run_RestPerfClient_Through_Netconf_Connector" line="89">
<doc>Ask RestPerfClient to send the requests to the MDSAL mapped via netconf topology device.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.469627" elapsed="0.000475">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t8" name="Check_For_Failed_Netconf_Connector_Requests" line="95">
<doc>Make sure there are no failed requests in the restperfclient log.
This is a separate test case to distinguish between restperfclient
failure and failed requests. Failed requests are rejected because
we don't want to test performance of ODL rejecting our requests.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.470265" elapsed="0.000837">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t9" name="Deconfigure_ODL_From_Netconf" line="110">
<doc>Deconfigure the ODL MDSAL Northbound attached to a Netconf connector.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.471321" elapsed="0.000522">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t10" name="Cleanup_And_Collect_For_Connector_Access" line="115">
<doc>Delete the test data produced by the Netconf connector MDSAL access.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.472032" elapsed="0.000442">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.473358" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-05T00:26:46.473265" elapsed="0.000176"/>
</kw>
<kw name="Teardown_Restperfclient" owner="RestPerfClient">
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.479794" level="FAIL">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</msg>
<arg>${RestPerfClient__restperfclient}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.473887" elapsed="0.005946">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-05T00:26:46.480008" elapsed="0.000118"/>
</kw>
<doc>Free resources allocated during the RestPerfClient setup</doc>
<status status="FAIL" start="2026-04-05T00:26:46.473660" elapsed="0.006588">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.473017" elapsed="0.007350">Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</kw>
<doc>netconf-restperfclient MDSAL performance test suite.

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

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


Perform given count of update operations on ODL MDSAL. In first half the
requests are directed directly to MDSAL via Restconf and in the second
half the MDSAL is mounted onto a netconf connector and the reqursts are
directed to that connector. In both cases the netconf-testtool-restperfclient
tool is used to generate and send the requests and the requests are sent
synchronously as the netconf connector mounted MDSAL does not support
asynchronous requests. The restperfclient is used to generate the "update"
requests, the "create" request is issued in a sepate test case.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.296936" elapsed="0.183501">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Variable '${RestPerfClient__restperfclient}' not found. Did you mean:
    ${RestPerfClient__restperfclientlog}</status>
</suite>
<suite id="s1-s4" name="Getmulti" source="/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/suites/netconf/scale/getmulti.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.563085" level="INFO">Creating Session using : alias=operational, url=http://:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7dabd4b18b90&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-04-05T00:26:46.562771" elapsed="0.000501"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-05T00:26:46.563445" elapsed="0.000184"/>
</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-04-05T00:26:46.568825" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.564433" elapsed="0.004443"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-05T00:26:46.564181" elapsed="0.004813"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.573903" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.570102" elapsed="0.003829"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.574142" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.574017" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.573993" elapsed="0.000217"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.574737" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.574363" elapsed="0.000418"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.575257" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.574943" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-05T00:26:46.575804" elapsed="0.000337"/>
</kw>
<msg time="2026-04-05T00:26:46.576259" level="INFO">${status} = PASS</msg>
<msg time="2026-04-05T00:26:46.576319" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.575448" elapsed="0.000899"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.576959" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.576541" elapsed="0.000445"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.577995" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.577717" elapsed="0.000305"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.578433" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.578171" elapsed="0.000289"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.578947" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.578616" elapsed="0.000358"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.581715" elapsed="0.000033"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.581501" elapsed="0.000297"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.579036" elapsed="0.002791"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.582404" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.581989" elapsed="0.000460"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.583028" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.582611" elapsed="0.000467"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.583626" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.583240" elapsed="0.000447"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-05T00:26:46.577240" elapsed="0.006506"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.569754" elapsed="0.014047"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.583980" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.583866" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.583848" elapsed="0.000198"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.587306" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.586922" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.587799" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.587492" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.587869" elapsed="0.000036"/>
</return>
<msg time="2026-04-05T00:26:46.588039" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.586540" elapsed="0.001523"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.588462" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.588284" elapsed="0.000239"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.588149" elapsed="0.000401"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-05T00:26:46.584333" elapsed="0.004271"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-05T00:26:46.588772" elapsed="0.000214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.589290" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.589156" elapsed="0.000198"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.589037" elapsed="0.000343"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-05T00:26:46.569296" elapsed="0.020137"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.592063" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.591952" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.591933" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.597398" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.597288" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.597269" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.598440" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.598053" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.598940" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.598629" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.599014" elapsed="0.000029"/>
</return>
<msg time="2026-04-05T00:26:46.599172" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.597711" elapsed="0.001487"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.599542" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.599805" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.599656" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.599624" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.599401" elapsed="0.000506"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.599250" elapsed="0.000680"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-05T00:26:46.596989" elapsed="0.002993"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-05T00:26:46.590020" elapsed="0.010017"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.589584" elapsed="0.010500"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.563864" elapsed="0.036271"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.600979" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.600710" elapsed="0.000295"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.606302" 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-04-05T00:26:46.601168" elapsed="0.005187"/>
</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-04-05T00:26:46.610815" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7dabd4b422d0&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-04-05T00:26:46.610409" elapsed="0.000532"/>
</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-04-05T00:26:46.609988" elapsed="0.001061"/>
</kw>
<status status="PASS" start="2026-04-05T00:26:46.606432" elapsed="0.004650"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.606412" elapsed="0.004696"/>
</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-04-05T00:26:46.616538" level="INFO">${odl_connection} = 3</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.616080" elapsed="0.000487"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.618287" level="INFO">Length is 0.</msg>
<msg time="2026-04-05T00:26:46.618365" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-05T00:26:46.618005" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.618546" elapsed="0.000341"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.619750" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-05T00:26:46.620077" level="FAIL">OSError: [Errno 16] Device or resource busy</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="FAIL" start="2026-04-05T00:26:46.619411" elapsed="0.001172">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.620659" 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="FAIL" start="2026-04-05T00:26:46.619056" elapsed="0.001657"/>
</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="FAIL" start="2026-04-05T00:26:46.617550" elapsed="0.003275">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.620874" 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="FAIL" start="2026-04-05T00:26:46.617154" elapsed="0.003766"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.616768" elapsed="0.004247">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.621073" elapsed="0.000018"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.615775" elapsed="0.005396">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.621338" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.621505" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.621626" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.621586" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.621568" elapsed="0.000135"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.625984" elapsed="0.000029"/>
</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="FAIL" start="2026-04-05T00:26:46.611358" elapsed="0.014747">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.600432" elapsed="0.025761">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.626355" elapsed="0.000023"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.626573" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.626783" elapsed="0.000022"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.626965" elapsed="0.000022"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.562479" elapsed="0.064626">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s4-t1" name="Start_Test_Tool" line="42">
<doc>Deploy and start test tool, then wait for all its devices to become online.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.627187" elapsed="0.000413">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t2" name="Configure_Devices_On_Netconf" line="50">
<doc>Make requests to configure the testtool devices.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.627803" elapsed="0.000348">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t3" name="Wait_For_Devices_To_Connect" line="55">
<doc>Wait for the devices to become connected.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.628341" elapsed="0.000352">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t4" name="Issue_Requests_On_Devices" line="60">
<doc>Spawn the specified count of worker threads to issue a GET request to each of the devices.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.628906" elapsed="0.000409">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t5" name="Deconfigure_Devices" line="75">
<doc>Make requests to deconfigure the testtool devices.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.629490" elapsed="0.000348">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t6" name="Check_Devices_Are_Deconfigured" line="81">
<doc>Check there are no netconf connectors or other stuff related to the testtool devices.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.630011" elapsed="0.000405">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.631102" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-05T00:26:46.631026" elapsed="0.000158"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.632224" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-05T00:26:46.631869" elapsed="0.000385"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.632601" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.632407" elapsed="0.000673">Cannot open session, you need to establish a connection first.</status>
</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="FAIL" start="2026-04-05T00:26:46.631658" elapsed="0.001543">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.633530" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.633361" elapsed="0.000771">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.638491" level="FAIL">Variable '${testtool_log}' not found.</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.634301" elapsed="0.004227">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.631385" elapsed="0.007284">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.630807" elapsed="0.007975">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</kw>
<doc>netconf-connector scaling test suite (multi-threaded GET requests).

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

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


Performs scaling tests:
- Send configurations of the devices one by one (via restconf).
- Wait for the devices to become connected.
- Send requests for configuration data using 10 worker threads
(using external Python tool).
- Deconfigure the devices one by one.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.481052" elapsed="0.157791">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</suite>
<suite id="s1-s5" name="Getsingle" source="/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/suites/netconf/scale/getsingle.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-05T00:26:46.718048" elapsed="0.000180"/>
</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-04-05T00:26:46.723452" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.719008" elapsed="0.004491"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-05T00:26:46.718789" elapsed="0.004769"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.728407" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.724666" elapsed="0.003769"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.728625" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.728515" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.728494" elapsed="0.000215"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.729216" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.728861" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.729748" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-05T00:26:46.729417" elapsed="0.000357"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-05T00:26:46.730275" elapsed="0.000281"/>
</kw>
<msg time="2026-04-05T00:26:46.730671" level="INFO">${status} = PASS</msg>
<msg time="2026-04-05T00:26:46.730719" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.729939" elapsed="0.000804"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.731328" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.730956" elapsed="0.000399"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.732342" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.732063" elapsed="0.000306"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.732791" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.732516" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.733267" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.732972" elapsed="0.000322"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.735901" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.735715" elapsed="0.000259"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.733349" elapsed="0.002655"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.736591" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.736160" elapsed="0.000475"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.737206" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.736810" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.737809" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-05T00:26:46.737405" elapsed="0.000447"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-05T00:26:46.731597" elapsed="0.006313"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.724314" elapsed="0.013652"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.738152" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.738037" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.738017" elapsed="0.000201"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.741339" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.740945" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.741831" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.741524" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.741902" elapsed="0.000034"/>
</return>
<msg time="2026-04-05T00:26:46.742061" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.740601" elapsed="0.001485"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<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="NOT RUN" start="2026-04-05T00:26:46.742422" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.742248" elapsed="0.000233"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.742138" elapsed="0.000369"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-05T00:26:46.738435" elapsed="0.004129"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-05T00:26:46.742751" elapsed="0.000217"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.743282" elapsed="0.000028"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.743143" elapsed="0.000216"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.743018" elapsed="0.000368"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-05T00:26:46.723862" elapsed="0.019579"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.746128" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.745979" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.745960" elapsed="0.000238"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.750955" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.750849" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.750831" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.751970" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-05T00:26:46.751573" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.752484" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-05T00:26:46.752154" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-05T00:26:46.752554" elapsed="0.000029"/>
</return>
<msg time="2026-04-05T00:26:46.752723" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-05T00:26:46.751240" elapsed="0.001509"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.753085" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.753322" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-05T00:26:46.753180" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.753163" elapsed="0.000233"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-05T00:26:46.752947" elapsed="0.000472"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.752800" elapsed="0.000643"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-05T00:26:46.750549" elapsed="0.002947"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-05T00:26:46.744024" elapsed="0.009525"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-05T00:26:46.743592" elapsed="0.009998"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-05T00:26:46.718449" elapsed="0.035203"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.754405" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.754143" elapsed="0.000288"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.758552" 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-04-05T00:26:46.754588" elapsed="0.004011"/>
</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-04-05T00:26:46.762917" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7dabd51a5950&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-04-05T00:26:46.762521" elapsed="0.000542"/>
</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-04-05T00:26:46.762111" elapsed="0.001025"/>
</kw>
<status status="PASS" start="2026-04-05T00:26:46.758683" elapsed="0.004484"/>
</branch>
<status status="PASS" start="2026-04-05T00:26:46.758665" elapsed="0.004527"/>
</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-04-05T00:26:46.768365" level="INFO">${odl_connection} = 4</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-05T00:26:46.767929" elapsed="0.000463"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.770028" level="INFO">Length is 0.</msg>
<msg time="2026-04-05T00:26:46.770105" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-05T00:26:46.769749" elapsed="0.000381"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-05T00:26:46.770290" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.771482" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-05T00:26:46.771781" level="FAIL">OSError: [Errno 16] Device or resource busy</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="FAIL" start="2026-04-05T00:26:46.771160" elapsed="0.001145">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.772364" 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="FAIL" start="2026-04-05T00:26:46.770802" elapsed="0.001612"/>
</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="FAIL" start="2026-04-05T00:26:46.769301" elapsed="0.003223">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-05T00:26:46.772573" 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="FAIL" start="2026-04-05T00:26:46.768914" elapsed="0.003704"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.768568" elapsed="0.004161">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-05T00:26:46.772779" elapsed="0.000018"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.767615" elapsed="0.005262">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-scale-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="NOT RUN" start="2026-04-05T00:26:46.773044" elapsed="0.000028"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.773218" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-05T00:26:46.773334" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-05T00:26:46.773297" elapsed="0.000074"/>
</branch>
<status status="NOT RUN" start="2026-04-05T00:26:46.773280" elapsed="0.000112"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.777617" elapsed="0.000039"/>
</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="FAIL" start="2026-04-05T00:26:46.763438" elapsed="0.014309">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.753893" elapsed="0.023939">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Configure_Timeout_For_Karaf_Console" owner="KarafKeywords">
<arg>120s</arg>
<doc>Configure a different timeout for each Karaf console.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.778121" elapsed="0.000025"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<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="NOT RUN" start="2026-04-05T00:26:46.778302" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-05T00:26:46.778482" elapsed="0.000020"/>
</kw>
<doc>Setup everything needed for the test cases.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.717813" elapsed="0.060772">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s5-t1" name="Start_Test_Tool" line="36">
<doc>Deploy and start test tool, then wait for all its devices to become online.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.778664" elapsed="0.000400">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t2" name="Configure_Devices_Onto_Netconf" line="44">
<doc>Make requests to configure the testtool devices.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-05T00:26:46.779254" elapsed="0.000360">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t3" name="Get_Data_From_Devices" line="50">
<doc>Ask testtool devices for data.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.779799" elapsed="0.000295">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t4" name="Deconfigure_Devices_From_Netconf" line="55">
<doc>Make requests to deconfigure the testtool devices.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-05T00:26:46.780274" elapsed="0.000357">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-05T00:26:46.781285" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-05T00:26:46.781212" elapsed="0.000136"/>
</kw>
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-05T00:26:46.782346" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-05T00:26:46.782030" elapsed="0.000344"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.782768" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.782550" elapsed="0.000662">Cannot open session, you need to establish a connection first.</status>
</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="FAIL" start="2026-04-05T00:26:46.781813" elapsed="0.001528">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.783696" level="FAIL">Cannot open session, you need to establish a connection first.</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.783514" elapsed="0.000817">Cannot open session, you need to establish a connection first.</status>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-05T00:26:46.788586" level="FAIL">Variable '${testtool_log}' not found.</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.784516" elapsed="0.004104">Variable '${testtool_log}' not found.</status>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.781544" elapsed="0.007210">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.781001" elapsed="0.007898">Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</kw>
<doc>netconf-connector scaling test suite (single-threaded GET requests).

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

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


Performs scaling tests:
- Configuring devices one by one.
- Sending requests for configuration data.
- Deconfiguring devices one by one.</doc>
<status status="FAIL" start="2026-04-05T00:26:46.639444" elapsed="0.149514">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Cannot open session, you need to establish a connection first.

2) Cannot open session, you need to establish a connection first.

3) Variable '${testtool_log}' not found.</status>
</suite>
<status status="FAIL" start="2026-04-05T00:26:44.323825" elapsed="2.465934"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="33" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="6" skip="0">critical</stat>
</tag>
<suite>
<stat name="netconf-scale.txt" id="s1" pass="0" fail="33" skip="0">netconf-scale.txt</stat>
<stat name="Ready" id="s1-s1" pass="0" fail="6" skip="0">netconf-scale.txt.Ready</stat>
<stat name="Netconfready" id="s1-s1-s1" pass="0" fail="6" skip="0">netconf-scale.txt.Ready.Netconfready</stat>
<stat name="Performance" id="s1-s2" pass="0" fail="7" skip="0">netconf-scale.txt.Performance</stat>
<stat name="Mdsal" id="s1-s3" pass="0" fail="10" skip="0">netconf-scale.txt.Mdsal</stat>
<stat name="Getmulti" id="s1-s4" pass="0" fail="6" skip="0">netconf-scale.txt.Getmulti</stat>
<stat name="Getsingle" id="s1-s5" pass="0" fail="4" skip="0">netconf-scale.txt.Getsingle</stat>
</suite>
</statistics>
<errors>
<msg time="2026-04-05T00:26:46.101101" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.105332" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.105819" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.115304" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.116871" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.118921" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.126135" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RestPerfClient.robot' on line 31: Suite 'netconf-scale.txt.Performance' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.300104" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.301615" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.304336" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.304835" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.312861" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.313784" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RestPerfClient.robot' on line 31: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.314512" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale.txt.Mdsal' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.483748" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.488005" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.488539" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.498354" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.499925" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.502062" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale.txt.Getmulti' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.641435" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.645728" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.646205" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.655669" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.657176" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-05T00:26:46.659203" level="WARN">Error in file '/w/workspace/netconf-csit-1node-scale-only-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-scale.txt.Getsingle' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
