<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-09-09T01:12:44.276601" rpa="false" schemaversion="5">
<suite id="s1" name="openflowplugin-scale-switch.txt" source="/w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/test/csit/suites/openflowplugin/Maximum_Switches/010__finding_max_switches.robot">
<kw name="Workflow Setup" owner="WorkflowsOpenFlow" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-09-09T01:12:44.928339" level="INFO">Creating Session using : alias=session, url=http://10.30.170.156:8181, headers={'Content-Type': 'application/xml'},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x775524125590&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>session</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>headers=${HEADERS_XML}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-09-09T01:12:44.927983" elapsed="0.000560"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-09-09T01:12:44.933838" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:44.933713" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:44.933666" elapsed="0.000252"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-09T01:12:44.934082" elapsed="0.000430"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-09-09T01:12:44.934952" level="INFO">Logging into '10.30.170.156:8101' as 'karaf'.</msg>
<msg time="2026-09-09T01:12:45.771590" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-09-09T01:12:44.934700" elapsed="0.837132"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-09-09T01:12:45.823730" level="INFO">@root&gt;log:set ERROR</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-09-09T01:12:45.772240" elapsed="0.051669"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-09-09T01:12:45.826184" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-09-09T01:12:45.826290" level="INFO">${output} = [?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-09-09T01:12:45.824288" elapsed="0.002033"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-09-09T01:12:45.826484" elapsed="0.000310"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:45.826963" elapsed="0.000252"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.827699" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:45.827369" elapsed="0.000380"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-09-09T01:12:45.827800" elapsed="0.000058"/>
</return>
<arg>log:set ${log_level}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.170.156
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-09-09T01:12:44.933364" elapsed="0.894609"/>
</kw>
<arg>3x</arg>
<arg>1s</arg>
<arg>KarafKeywords.Issue Command On Karaf Console</arg>
<arg>log:set ${log_level}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-09-09T01:12:44.929631" elapsed="0.898428"/>
</kw>
<status status="PASS" start="2026-09-09T01:12:44.927608" elapsed="0.900512"/>
</kw>
<test id="s1-t1" name="Find Max Switches" line="22">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.829263" level="INFO">${error_message} = Fail initializing suite</msg>
<var>${error_message}</var>
<arg>Fail initializing suite</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.828950" elapsed="0.000339"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.831452" level="INFO">${maximum_switches} = 0</msg>
<var>${maximum_switches}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.829470" elapsed="0.002008"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.831911" level="INFO">${discover_time} = 0</msg>
<var>${discover_time}</var>
<arg>0</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.831658" elapsed="0.000277"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.832428" level="INFO">${start} = 100</msg>
<var>${start}</var>
<arg>${MIN_SWITCHES}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-09-09T01:12:45.832139" elapsed="0.000312"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.832922" level="INFO">${stop} = 800</msg>
<var>${stop}</var>
<arg>${MAX_SWITCHES}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-09-09T01:12:45.832628" elapsed="0.000317"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.833428" level="INFO">${step} = 100</msg>
<var>${step}</var>
<arg>${STEP_SWITCHES}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-09-09T01:12:45.833143" elapsed="0.000309"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Workflow Linear Topology" owner="WorkflowsOpenFlow">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.841293" level="INFO">${error_message} = Test has completed</msg>
<var>${error_message}</var>
<arg>Test has completed</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.840995" elapsed="0.000325"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.843137" level="INFO">${topology_discover_time} = 0</msg>
<var>${topology_discover_time}</var>
<arg>${0}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.841501" elapsed="0.001661"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.843604" level="INFO">${controller_list} = ['10.30.170.156']</msg>
<var>${controller_list}</var>
<arg>${ODL_SYSTEM_IP}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-09-09T01:12:45.843340" elapsed="0.000288"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.844133" level="INFO">${flow_count} = 10000</msg>
<var>${flow_count}</var>
<arg>${flow_count}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-09-09T01:12:45.843820" elapsed="0.000336"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.844728" level="INFO">${flows_ovs_25} = 10100</msg>
<var>${flows_ovs_25}</var>
<arg>${flow_count} + ${switches}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-09-09T01:12:45.844328" elapsed="0.000425"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.845201" level="INFO">${flows_before} = 100</msg>
<var>${flows_before}</var>
<arg>${switches}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.844929" elapsed="0.000295"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.845644" level="INFO">${flows_after} = 10100</msg>
<var>${flows_after}</var>
<arg>${flows_ovs_25}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-09-09T01:12:45.845395" elapsed="0.000288"/>
</kw>
<kw name="Generate New Flow Details" owner="ScaleClient">
<msg time="2026-09-09T01:12:45.866740" level="INFO">${flows} = [(85, 6, 0), (43, 5, 1), (57, 5, 2), (39, 7, 3), (86, 2, 4), (77, 2, 5), (41, 7, 6), (44, 7, 7), (89, 9, 8), (57, 0, 9), (96, 7, 10), (90, 8, 11), (13, 8, 12), (76, 2, 13), (60, 7, 14), (76, 6, 15), (...</msg>
<msg time="2026-09-09T01:12:45.867184" level="INFO">${notes} = {85: {'total': 100, 6: 8, 2: 9, 3: 16, 7: 10, 1: 12, 5: 6, 0: 9, 8: 10, 4: 12, 9: 8}, 43: {'total': 106, 5: 5, 3: 15, 4: 7, 2: 15, 7: 16, 6: 7, 1: 7, 0: 11, 8: 16, 9: 7}, 57: {'total': 89, 5: 14, 0: 1...</msg>
<var>${flows}</var>
<var>${notes}</var>
<arg>flows=${flow_count}</arg>
<arg>switches=${switches}</arg>
<arg>swspread=${swspread}</arg>
<arg>tables=${tables}</arg>
<arg>tabspread=${tabspread}</arg>
<doc>Generate a list of tupples (switch_id, table_id, flow_id) which are generated
according to the spread rules between swithces and tables.
It also returns a dictionary with statsistics.</doc>
<status status="PASS" start="2026-09-09T01:12:45.845837" elapsed="0.021376"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-09-09T01:12:45.867566" elapsed="0.000481"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Starting mininet linear ${switches} switches</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-09-09T01:12:45.868239" elapsed="0.000280"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Start Mininet Linear" owner="MininetKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.872460" level="INFO">Start Mininet Linear</msg>
<arg>Start Mininet Linear</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:45.872202" elapsed="0.000303"/>
</kw>
<kw name="Start Mininet Single Controller" owner="MininetKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.875306" level="INFO">Clear any existing mininet</msg>
<arg>Clear any existing mininet</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:45.875098" elapsed="0.000264"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:45.878028" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-09-09T01:12:45.877636" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:45.877599" elapsed="0.000518"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:45.878502" 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-09-09T01:12:45.878612" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-09-09T01:12:45.878265" elapsed="0.000371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.879201" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.26" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:45.878800" elapsed="0.000445"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:45.879774" level="INFO">${conn_id} = 2</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-09T01:12:45.879393" elapsed="0.000404"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-09-09T01:12:45.881212" level="INFO">Length is 0.</msg>
<msg time="2026-09-09T01:12:45.881291" 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-09-09T01:12:45.880388" elapsed="0.000925"/>
</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-09-09T01:12:45.881467" elapsed="0.000640"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-09-09T01:12:45.883526" level="INFO">Logging into '10.30.170.26:22' as 'jenkins'.</msg>
<msg time="2026-09-09T01:12:46.079973" level="FAIL">Login with public key failed for user 'jenkins'.</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-09-09T01:12:45.882972" elapsed="0.200517">Login with public key failed for user 'jenkins'.</status>
</kw>
<msg time="2026-09-09T01:12:46.083643" 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-09-09T01:12:45.882268" elapsed="0.201468"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.880033" elapsed="0.203835">Login with public key failed for user 'jenkins'.</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.084124" elapsed="0.000029"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.084296" elapsed="0.000018"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.084519" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.084689" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.084625" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.084598" elapsed="0.000158"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.084841" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.084807" elapsed="0.000071"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.084793" elapsed="0.000106"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.084929" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-09T01:12:46.087611" elapsed="0.000617"/>
</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-09-09T01:12:46.088390" elapsed="0.000220"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:46.088778" elapsed="0.000099"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-09-09T01:12:46.085308" elapsed="0.003621"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.877086" elapsed="0.211951">Login with public key failed for user 'jenkins'.</status>
</kw>
<msg time="2026-09-09T01:12:46.089108" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.876486" elapsed="0.212674"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.875951" elapsed="0.213305">Login with public key failed for user 'jenkins'.</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.089438" elapsed="0.000023"/>
</kw>
<arg>${mininet}</arg>
<status status="FAIL" start="2026-09-09T01:12:45.875586" elapsed="0.213993">Login with public key failed for user 'jenkins'.</status>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<var>${mininet_conn_id}</var>
<arg>ip_address=${mininet}</arg>
<arg>timeout=${timeout}</arg>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.093717" elapsed="0.000031"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.093966" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="'${custom}' != '${EMPTY}'">
<kw name="Put File" owner="SSHLibrary">
<arg>${custom}</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.094262" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-09-09T01:12:46.094077" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.094053" elapsed="0.000278"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>Start mininet ${options} to ${controller}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.094488" elapsed="0.000019"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<arg>sudo mn --controller 'remote,ip=${controller},port=${ofport}' ${options} --switch ovsk,protocols=OpenFlow${ofversion}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.094640" elapsed="0.000018"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.094805" elapsed="0.000017"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>Check OVS configuratiom</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.094977" elapsed="0.000018"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<arg>sh ovs-vsctl show</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.095137" elapsed="0.000018"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.095280" elapsed="0.000016"/>
</kw>
<return>
<value>${mininet_conn_id}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.095382" elapsed="0.000018"/>
</return>
<arg>options=--topo linear,${switches}</arg>
<arg>ofversion=${ofversion}</arg>
<arg>ofport=${ofport}</arg>
<arg>timeout=${mininet_timeout}</arg>
<doc>Start Mininet with custom topology and connect to controller.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.872833" elapsed="0.222661">Login with public key failed for user 'jenkins'.</status>
</kw>
<arg>${switches}</arg>
<arg>mininet_timeout=${switches*4}</arg>
<doc>Start mininet linear topology with 100 nodes.</doc>
<status status="FAIL" start="2026-09-09T01:12:45.869254" elapsed="0.226331">Login with public key failed for user 'jenkins'.</status>
</kw>
<msg time="2026-09-09T01:12:46.095710" level="INFO">${status} = FAIL</msg>
<msg time="2026-09-09T01:12:46.095752" level="INFO">${result} = Login with public key failed for user 'jenkins'.</msg>
<var>${status}</var>
<var>${result}</var>
<arg>MininetKeywords.Start Mininet Linear</arg>
<arg>${switches}</arg>
<arg>mininet_timeout=${switches*4}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-09-09T01:12:45.868742" elapsed="0.227030"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail starting mininet</value>
<value>${topology_discover_time}</value>
<status status="PASS" start="2026-09-09T01:12:46.095956" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-09-09T01:12:46.095845" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:46.095827" elapsed="0.000227"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<var>${start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.096194" elapsed="0.000018"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Verify controller is OK</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.096382" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Utils.Verify Controller Is Not Dead</arg>
<arg>${ODL_SYSTEM_IP}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.096577" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Controller is dead</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.096711" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.096660" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.096644" elapsed="0.000131"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Utils.Verify Controller Has No Null Pointer Exceptions</arg>
<arg>${ODL_SYSTEM_IP}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.096945" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Controller has NPE</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.097080" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.097045" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.097026" elapsed="0.000116"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Utils.Verify Controller Has No Runtime Exceptions</arg>
<arg>${ODL_SYSTEM_IP}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.097311" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Controller has RuntimeException</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.097422" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.097391" elapsed="0.000071"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.097377" elapsed="0.000104"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking ${switches} switches</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.097637" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>${switches*2}</arg>
<arg>2s</arg>
<arg>FlowLib.Check Switches In Inventory</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.097847" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking switch</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.097965" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.097934" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.097918" elapsed="0.000121"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Add table miss flows</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.098196" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>FlowLib.Add Table Miss Flows</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.098390" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail adding table Miss flows</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.098500" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.098469" elapsed="0.000071"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.098454" elapsed="0.000105"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking Table Miss Flows</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.098727" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>${switches}</arg>
<arg>2s</arg>
<arg>FlowLib.Check Table Miss Flows</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.098914" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking table miss flows</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.099044" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.098998" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.098984" elapsed="0.000119"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking Linear Topology</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.099261" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>${switches}</arg>
<arg>2s</arg>
<arg>FlowLib.Check Linear Topology</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.099447" elapsed="0.000017"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking topology</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.099600" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.099569" elapsed="0.000070"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.099554" elapsed="0.000104"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<var>${end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.099802" elapsed="0.000018"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<var>${topology_discover_time}</var>
<arg>${end_time}</arg>
<arg>${start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.099956" elapsed="0.000018"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Topology Discovery Time = ${topology_discover_time} seconds</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.100206" elapsed="0.000022"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Adding ${flow_count} flows</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.100411" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>ScaleClient.Configure Flows</arg>
<arg>flow_details=${flows}</arg>
<arg>controllers=${controller_list}</arg>
<arg>nrthreads=${nrthreads}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.100603" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail configuring flows</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.100738" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.100706" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.100690" elapsed="0.000107"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking ${flow_count} flows in Mininet</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.100954" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>MininetKeywords.Verify Aggregate Flow From Mininet Session</arg>
<arg>${mininet_conn_id}</arg>
<arg>${flows_after}</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.101156" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking flows in mininet</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.101270" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.101240" elapsed="0.000069"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.101225" elapsed="0.000102"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking ${flow_count} flows in Operational DS</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.101481" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>${switches*4}</arg>
<arg>2s</arg>
<arg>FlowLib.Check Flows Operational Datastore</arg>
<arg>${flows_after}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.101680" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking flows in operational DS</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.101796" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.101766" elapsed="0.000070"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.101751" elapsed="0.000104"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Sleep for ${sustain_time} seconds</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.102020" elapsed="0.000019"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${sustain_time}</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.102191" elapsed="0.000017"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Deleting ${flow_count} flows</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.102363" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>ScaleClient.Deconfigure Flows</arg>
<arg>flow_details=${flows}</arg>
<arg>controllers=${controller_list}</arg>
<arg>nrthreads=${nrthreads}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.102548" elapsed="0.000017"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail deconfiguring flows</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.102660" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.102630" elapsed="0.000090"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.102616" elapsed="0.000123"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking no flows in Mininet</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.102891" elapsed="0.000018"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>MininetKeywords.Verify Aggregate Flow From Mininet Session</arg>
<arg>${mininet_conn_id}</arg>
<arg>${flows_before}</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.103088" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking no flows in mininet</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.103201" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.103171" elapsed="0.000070"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.103157" elapsed="0.000103"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking no flows in Operational DS</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.103419" elapsed="0.000020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>${switches*4}</arg>
<arg>2s</arg>
<arg>FlowLib.Check Flows Operational Datastore</arg>
<arg>${flows_before}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.103608" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking no flows in operational DS</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.103738" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.103707" elapsed="0.000099"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.103692" elapsed="0.000136"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Stopping Mininet</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.103983" elapsed="0.000031"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>MininetKeywords.Stop Mininet And Exit</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.104186" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail stopping mininet</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.104300" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.104268" elapsed="0.000072"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.104254" elapsed="0.000105"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking No Switches</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.104514" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>30s</arg>
<arg>2s</arg>
<arg>FlowLib.Check No Switches In Inventory</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.104716" elapsed="0.000018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking no switch</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.104833" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.104802" elapsed="0.000070"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.104788" elapsed="0.000103"/>
</if>
<kw name="Log To Console" owner="BuiltIn">
<arg>Checking No Topology</arg>
<doc>Logs the given message to the console.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.105058" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${result}</var>
<arg>Wait Until Keyword Succeeds</arg>
<arg>10s</arg>
<arg>2s</arg>
<arg>FlowLib.Check No Switches In Topology</arg>
<arg>${switches}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.105245" elapsed="0.000017"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<return>
<value>${status}</value>
<value>Fail checking no topology</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.105358" elapsed="0.000011"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:46.105328" elapsed="0.000068"/>
</branch>
<status status="NOT RUN" start="2026-09-09T01:12:46.105314" elapsed="0.000101"/>
</if>
<return>
<value>PASS</value>
<value>${error_message}</value>
<value>${topology_discover_time}</value>
<status status="NOT RUN" start="2026-09-09T01:12:46.105442" elapsed="0.000011"/>
</return>
<msg time="2026-09-09T01:12:46.105634" level="INFO">${status} = FAIL</msg>
<msg time="2026-09-09T01:12:46.105691" level="INFO">${error_message} = Fail starting mininet</msg>
<msg time="2026-09-09T01:12:46.105731" level="INFO">${topology_discover_time} = 0</msg>
<var>${status}</var>
<var>${error_message}</var>
<var>${topology_discover_time}</var>
<arg>${switches}</arg>
<doc>Workflow to bring a Linear topology of 100 switches, push flows, hold for ${sustain_time} seconds, delete flows and stop topology.
This KW returns workflow state (PASS/FAIL), error message and topology discover time.</doc>
<status status="PASS" start="2026-09-09T01:12:45.840424" elapsed="0.265328"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<break>
<status status="PASS" start="2026-09-09T01:12:46.105930" elapsed="0.000035"/>
</break>
<status status="PASS" start="2026-09-09T01:12:46.105820" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:46.105805" elapsed="0.000225"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<var>${maximum_switches}</var>
<arg>${switches}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.106201" elapsed="0.000019"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${discover_time}</var>
<arg>${topology_discover_time}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:46.106384" elapsed="0.000017"/>
</kw>
<var name="${switches}">100</var>
<status status="PASS" start="2026-09-09T01:12:45.835553" elapsed="0.270880"/>
</iter>
<var>${switches}</var>
<value>${start}</value>
<value>${stop+1}</value>
<value>${step}</value>
<status status="PASS" start="2026-09-09T01:12:45.833518" elapsed="0.272953"/>
</for>
<kw name="Log To Console" owner="BuiltIn">
<arg>${\n}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-09-09T01:12:46.106648" elapsed="0.000464"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Execution stopped because: ${error_message}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-09-09T01:12:46.107327" elapsed="0.000317"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>Max Switches: ${maximum_switches}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-09-09T01:12:46.107861" elapsed="0.000335"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-09-09T01:12:46.108719" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/switches.csv"&gt;/w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/switches.csv&lt;/a&gt;'.</msg>
<arg>${SWITCHES_RESULT_FILE}</arg>
<arg>Max Switches\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-09-09T01:12:46.108374" elapsed="0.000396"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-09-09T01:12:46.109187" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/switches.csv"&gt;/w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/switches.csv&lt;/a&gt;'.</msg>
<arg>${SWITCHES_RESULT_FILE}</arg>
<arg>${maximum_switches}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-09-09T01:12:46.108914" elapsed="0.000338"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-09-09T01:12:46.109731" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/time.csv"&gt;/w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/time.csv&lt;/a&gt;'.</msg>
<arg>${TIME_RESULT_FILE}</arg>
<arg>Discover Time\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-09-09T01:12:46.109452" elapsed="0.000330"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-09-09T01:12:46.110180" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/time.csv"&gt;/w/workspace/openflowplugin-csit-1node-scale-switch-only-titanium/time.csv&lt;/a&gt;'.</msg>
<arg>${TIME_RESULT_FILE}</arg>
<arg>${discover_time}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-09-09T01:12:46.109925" elapsed="0.000304"/>
</kw>
<doc>Find max number of switches starting from 100 till reaching 800 in steps of 100</doc>
<status status="PASS" start="2026-09-09T01:12:45.828281" elapsed="0.282078"/>
</test>
<kw name="Workflow Teardown" owner="WorkflowsOpenFlow" type="TEARDOWN">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-09-09T01:12:47.269292" level="INFO">DELETE Request : url=http://10.30.170.156:8181/rests/data/opendaylight-inventory:nodes 
 path_url=/rests/data/opendaylight-inventory:nodes 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-09-09T01:12:47.271813" level="INFO">DELETE Response : url=http://10.30.170.156:8181/rests/data/opendaylight-inventory:nodes 
 status=409, reason=Conflict 
 headers={'Set-Cookie': 'JSESSIONID=node0sbjcuuyj9u6jqbg0cb0fgen0.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Tue, 08-Sep-2026 01:12:47 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT', 'Content-Type': 'application/yang-data+json', 'Content-Length': '231'} 
 body={
  "errors": {
    "error": [
      {
        "error-tag": "data-missing",
        "error-message": "Data does not exist",
        "error-path": "/opendaylight-inventory:nodes",
        "error-type": "protocol"
      }
    ]
  }
} 
 </msg>
<arg>session</arg>
<arg>url=${RFC8040_NODES_API}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-09-09T01:12:46.111765" elapsed="1.160230"/>
</kw>
<arg>RequestsLibrary.DELETE On Session</arg>
<arg>session</arg>
<arg>url=${RFC8040_NODES_API}</arg>
<arg>expected_status=anything</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-09-09T01:12:46.111400" elapsed="1.160830"/>
</kw>
<kw name="Clean Mininet System" owner="Utils">
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:47.278997" elapsed="0.000105"/>
</kw>
<status status="NOT RUN" start="2026-09-09T01:12:47.277974" elapsed="0.001218"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.277903" elapsed="0.001344"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.280358" 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-09-09T01:12:47.280698" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.279814" elapsed="0.000969"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.282344" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.170.26" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:47.281282" elapsed="0.001163"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.283758" level="INFO">${conn_id} = 4</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-09T01:12:47.282813" elapsed="0.001003"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.286096" level="INFO">Length is 0.</msg>
<msg time="2026-09-09T01:12:47.286352" 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-09-09T01:12:47.285226" elapsed="0.001197"/>
</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-09-09T01:12:47.286841" elapsed="0.000851"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.290116" level="INFO">Logging into '10.30.170.26:22' as 'jenkins'.</msg>
<msg time="2026-09-09T01:12:47.513074" level="FAIL">Login with public key failed for user 'jenkins'.</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-09-09T01:12:47.289200" elapsed="0.225946">Login with public key failed for user 'jenkins'.</status>
</kw>
<msg time="2026-09-09T01:12:47.515232" 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-09-09T01:12:47.288098" elapsed="0.227203"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.284349" elapsed="0.231093">Login with public key failed for user 'jenkins'.</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.515985" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-09-09T01:12:47.516152" level="INFO">${stdout} = None</msg>
<msg time="2026-09-09T01:12:47.516192" level="INFO">${stderr} = None</msg>
<msg time="2026-09-09T01:12:47.516230" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.515712" elapsed="0.000798">Connection not open</status>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.516690" elapsed="0.000104"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.517308" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:47.517001" elapsed="0.000348"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:47.517560" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:47.517430" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.517404" elapsed="0.000225"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-09-09T01:12:47.517786" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-09-09T01:12:47.517692" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.517678" elapsed="0.000243"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:47.517953" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-09T01:12:47.520715" elapsed="0.000332"/>
</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-09-09T01:12:47.521200" elapsed="0.000161"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.521497" elapsed="0.000090"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-09-09T01:12:47.518301" elapsed="0.003333"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.276500" elapsed="0.245273">Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<msg time="2026-09-09T01:12:47.521824" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.274978" elapsed="0.246902"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.273970" elapsed="0.248015">Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-09-09T01:12:47.523863" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-09-09T01:12:47.523583" elapsed="0.000331"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.523566" elapsed="0.000369"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.524234" 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-09-09T01:12:47.524330" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.524087" elapsed="0.000266"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.524863" level="INFO">Attempting to execute command "sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh" on remote system "10.30.170.26" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:47.524494" elapsed="0.000411"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.525409" level="INFO">${conn_id} = 6</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-09T01:12:47.525066" elapsed="0.000368"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.526249" level="INFO">Length is 0.</msg>
<msg time="2026-09-09T01:12:47.526316" 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-09-09T01:12:47.525975" elapsed="0.000362"/>
</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-09-09T01:12:47.526481" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.527590" level="INFO">Logging into '10.30.170.26:22' as 'jenkins'.</msg>
<msg time="2026-09-09T01:12:47.720407" level="FAIL">Login with public key failed for user 'jenkins'.</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-09-09T01:12:47.527307" elapsed="0.195617">Login with public key failed for user 'jenkins'.</status>
</kw>
<msg time="2026-09-09T01:12:47.723062" 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-09-09T01:12:47.526954" elapsed="0.196202"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.525637" elapsed="0.197707">Login with public key failed for user 'jenkins'.</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-09-09T01:12:47.724020" level="INFO">Executing command 'sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh'.</msg>
<msg time="2026-09-09T01:12:47.724212" level="INFO">${stdout} = None</msg>
<msg time="2026-09-09T01:12:47.724268" level="INFO">${stderr} = None</msg>
<msg time="2026-09-09T01:12:47.724318" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.723680" elapsed="0.001055">Connection not open</status>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.725078" elapsed="0.000143"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-09T01:12:47.725894" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-09T01:12:47.725501" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:47.726270" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-09-09T01:12:47.726080" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.726046" elapsed="0.000323"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-09-09T01:12:47.726571" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-09-09T01:12:47.726437" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-09-09T01:12:47.726418" elapsed="0.000279"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-09T01:12:47.726742" elapsed="0.000019"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-09T01:12:47.730304" elapsed="0.000442"/>
</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-09-09T01:12:47.730961" elapsed="0.000228"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-09T01:12:47.731380" elapsed="0.000124"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-09-09T01:12:47.727217" elapsed="0.004351"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.523144" elapsed="0.208613">Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<msg time="2026-09-09T01:12:47.731830" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.522589" elapsed="0.209314"/>
</kw>
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-09-09T01:12:47.522182" elapsed="0.209891">Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<status status="FAIL" start="2026-09-09T01:12:47.273123" elapsed="0.459105">Several failures occurred:

1) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open

2) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-09-09T01:12:47.732525" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-09-09T01:12:47.732428" elapsed="0.000204"/>
</kw>
<doc>Cleanup when workflow is interrupt</doc>
<status status="FAIL" start="2026-09-09T01:12:46.111145" elapsed="1.621649">Several failures occurred:

1) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open

2) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</kw>
<doc>Test suite for finding out max number of switches</doc>
<status status="FAIL" start="2026-09-09T01:12:44.278132" elapsed="3.454760">Suite teardown failed:
Several failures occurred:

1) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open

2) Several failures occurred:

1) Login with public key failed for user 'jenkins'.

2) Connection not open</status>
</suite>
<statistics>
<total>
<stat pass="0" fail="1" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="openflowplugin-scale-switch.txt" id="s1" pass="0" fail="1" skip="0">openflowplugin-scale-switch.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
