<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-16T01:46:04.950688" rpa="false" schemaversion="5">
<suite id="s1" name="openflowplugin-perf-bulkomatic.txt" source="/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/suites/openflowplugin/Performance_Bulkomatic/100K_Flows_100DPN_1Node_Perf_Test.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.674530" 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-16T01:46:05.670644" elapsed="0.003928"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-16T01:46:05.674830" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:05.674686" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:05.674658" elapsed="0.000251"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.675434" 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-16T01:46:05.675077" elapsed="0.000407"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.676033" level="INFO">${cluster_size} = 1</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-16T01:46:05.675667" elapsed="0.000397"/>
</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-16T01:46:05.676657" elapsed="0.000329"/>
</kw>
<msg time="2026-04-16T01:46:05.677100" level="INFO">${status} = PASS</msg>
<msg time="2026-04-16T01:46:05.677154" level="INFO">${possibly_int_of_members} = 1</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-16T01:46:05.676246" elapsed="0.000934"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.677781" level="INFO">${int_of_members} = 1</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-16T01:46:05.677368" elapsed="0.000441"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.678871" 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-16T01:46:05.678577" elapsed="0.000323"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.679336" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-16T01:46:05.679060" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.679900" 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-16T01:46:05.679537" elapsed="0.000392"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:05.683307" elapsed="0.000232"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.684051" level="INFO">${member_ip} = 10.30.170.129</msg>
<var>${member_ip}</var>
<arg>${ODL_SYSTEM_${index}_IP}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:05.683700" elapsed="0.000378"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-16T01:46:05.684233" elapsed="0.000293"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.685348" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:05.685044" elapsed="0.000332"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:05.685422" elapsed="0.000042"/>
</return>
<msg time="2026-04-16T01:46:05.685593" level="INFO">${session_alias} = ClusterManagement__session_1</msg>
<var>${session_alias}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:05.684738" elapsed="0.000881"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:05.686323" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.129:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x74cd9a471b90&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>${session_alias}</arg>
<arg>http://${member_ip}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<arg>timeout=${http_timeout}</arg>
<arg>max_retries=${http_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-16T01:46:05.685857" elapsed="0.000633"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${session_list}</arg>
<arg>${session_alias}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:05.686655" elapsed="0.000210"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-04-16T01:46:05.682611" elapsed="0.004316"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-16T01:46:05.682417" elapsed="0.004555"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-04-16T01:46:05.679991" elapsed="0.007014"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.687545" level="INFO">${ClusterManagement__member_index_list} = [1]</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:05.687178" elapsed="0.000410"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.688125" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.129'}</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-16T01:46:05.687765" elapsed="0.000403"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.688767" level="INFO">${ClusterManagement__session_list} = ['ClusterManagement__session_1']</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:05.688401" elapsed="0.000410"/>
</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-16T01:46:05.678071" elapsed="0.010800"/>
</kw>
<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-16T01:46:05.669890" elapsed="0.019040"/>
</kw>
<test id="s1-t1" name="Initialize Variables" line="32">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Run_Karaf_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-16T01:46:05.693879" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-16T01:46:05.693475" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-16T01:46:05.694466" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-16T01:46:05.694149" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-16T01:46:05.694540" elapsed="0.000034"/>
</return>
<msg time="2026-04-16T01:46:05.694705" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-16T01:46:05.693087" elapsed="0.001659"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:05.695353" level="INFO">${member_ip} = 10.30.170.129</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:05.695086" elapsed="0.000293"/>
</kw>
<kw name="Safe_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-04-16T01:46:05.696211" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:05.696097" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:05.696076" elapsed="0.000208"/>
</if>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:05.697597" 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-16T01:46:05.697707" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-16T01:46:05.697415" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" 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-04-16T01:46:05.702259" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:05.702147" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:05.702126" elapsed="0.000206"/>
</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-04-16T01:46:05.702482" elapsed="0.000460"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-04-16T01:46:05.703372" level="INFO">Logging into '10.30.170.129:8101' as 'karaf'.</msg>
<msg time="2026-04-16T01:46:06.396741" level="INFO">Read output: [33m                                                                                           
[33m    ________                       ________                .__  .__       .__     __       
[33m    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
[33m     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \&lt;   |  ||  | |  |/ ___\|  |  \   __\    
[33m    /    |    \  |_&gt; &gt;  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  &gt;   Y  \  |      
[33m    \_______  /   __/ \___  &gt;___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
[33m            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
[33m                                                                                           

Hit '[1m&lt;tab&gt;[0m' for a list of available commands
and '[1m[cmd] --help[0m' for help on a specific command.
Hit '[1m&lt;ctrl-d&gt;[0m' or type '[1msystem:shutdown[0m' or '[1mlogout[0m' to shutdown OpenDaylight.

[?1h=[90m~[0m                                                                                [?2004hopendaylight-user</msg>
<arg>${KARAF_USER}</arg>
<arg>${KARAF_PASSWORD}</arg>
<arg>loglevel=${loglevel}</arg>
<doc>Logs into the SSH server with the given ``username`` and ``password``.</doc>
<status status="PASS" start="2026-04-16T01:46:05.703108" elapsed="0.693902"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-16T01:46:06.446170" level="INFO">@root&gt;log:set WARN</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-16T01:46:06.397532" elapsed="0.048720"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-04-16T01:46:06.447979" level="INFO">[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-04-16T01:46:06.448076" 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-04-16T01:46:06.446455" elapsed="0.001649"/>
</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-04-16T01:46:06.448259" elapsed="0.000209"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:06.448732" elapsed="0.000247"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.449493" 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-04-16T01:46:06.449145" elapsed="0.000399"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-16T01:46:06.449595" elapsed="0.000054"/>
</return>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.170.129
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-04-16T01:46:05.701748" elapsed="0.748042"/>
</kw>
<msg time="2026-04-16T01:46:06.449845" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:05.697905" elapsed="0.752004"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:06.452877" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.453397" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:06.453772" elapsed="0.000117"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-16T01:46:06.450236" elapsed="0.003707"/>
</kw>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-16T01:46:05.696915" elapsed="0.757096"/>
</kw>
<msg time="2026-04-16T01:46:06.454066" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHKeywords.Run_Keyword_Preserve_Connection</arg>
<arg>Issue_Command_On_Karaf_Console</arg>
<arg>${cmd}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<arg>${timeout}</arg>
<arg>${loglevel}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:05.696437" elapsed="0.757683"/>
</kw>
<arg>${command}</arg>
<arg>${member_ip}</arg>
<arg>timeout=${timeout}</arg>
<doc>Run Issue_Command_On_Karaf_Console but restore previous connection afterwards.</doc>
<status status="PASS" start="2026-04-16T01:46:05.695636" elapsed="0.758570"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-16T01:46:05.694947" elapsed="0.759297"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-16T01:46:05.694803" elapsed="0.759481"/>
</for>
<arg>${karaf_log_level}</arg>
<doc>Cycle through indices (or all), run karaf command on each.</doc>
<status status="PASS" start="2026-04-16T01:46:05.690664" elapsed="0.763682"/>
</kw>
<arg>3x</arg>
<arg>3s</arg>
<arg>ClusterManagement.Run_Karaf_Command_On_List_Or_All</arg>
<arg>${karaf_log_level}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:05.689991" elapsed="0.764404"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.454952" level="INFO">${flow_count_after_add} = 100000</msg>
<var>${flow_count_after_add}</var>
<arg>${flow_count_per_switch} * ${switch_count}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:06.454562" elapsed="0.000416"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.455465" level="INFO">${flow_count_after_add} = 100000</msg>
<arg>${flow_count_after_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:06.455143" elapsed="0.000364"/>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:06.456388" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_add_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_add_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-16T01:46:06.456738" level="INFO">${body} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "1",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true",...</msg>
<var>${body}</var>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.456227" elapsed="0.000541"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.457268" level="INFO">${get_string} = "sal-bulk-flow:dpn-count" : "1"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "1"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.456966" elapsed="0.000331"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.457778" level="INFO">${put_string} = "sal-bulk-flow:dpn-count" : "32"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "${dpn_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.457467" elapsed="0.000338"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.458345" level="INFO">${str} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true"...</msg>
<var>${str}</var>
<arg>${body}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.457979" elapsed="0.000394"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.458820" level="INFO">${get_string} = "sal-bulk-flow:flows-per-dpn" : "1000"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "1000"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.458548" elapsed="0.000299"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.459301" level="INFO">${put_string} = "sal-bulk-flow:flows-per-dpn" : "3125"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "${flows_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.459013" elapsed="0.000315"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.459918" level="INFO">${json_body_add} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true"...</msg>
<var>${json_body_add}</var>
<arg>${str}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.459534" elapsed="0.000413"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.460380" level="INFO">${get_string} = "sal-bulk-flow:batch-size" : "1"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:batch-size" : "1"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.460126" elapsed="0.000280"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.460891" level="INFO">${put_string} = "sal-bulk-flow:batch-size" : "3125"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:batch-size" : "${flows_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.460581" elapsed="0.000337"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.461449" level="INFO">${json_body_add} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "tr...</msg>
<var>${json_body_add}</var>
<arg>${json_body_add}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.461090" elapsed="0.000386"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.462092" level="INFO">{
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
</msg>
<arg>${json_body_add}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:06.461645" elapsed="0.000496"/>
</kw>
<return>
<value>${json_body_add}</value>
<status status="PASS" start="2026-04-16T01:46:06.462185" elapsed="0.000032"/>
</return>
<msg time="2026-04-16T01:46:06.462348" level="INFO">${temp_json_config_add} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "tr...</msg>
<var>${temp_json_config_add}</var>
<arg>${orig_json_config_add}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Add json file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.455807" elapsed="0.006568"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:06.463210" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_get_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_get_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-16T01:46:06.463339" level="INFO">${body} = {
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "1",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:start-t...</msg>
<var>${body}</var>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.463065" elapsed="0.000302"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.463808" level="INFO">${get_string} = "sal-bulk-flow:dpn-count" : "1"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "1"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.463540" elapsed="0.000295"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.464289" level="INFO">${put_string} = "sal-bulk-flow:dpn-count" : "32"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "${dpn_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.464004" elapsed="0.000311"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.464771" level="INFO">${str} = {
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:start-...</msg>
<var>${str}</var>
<arg>${body}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.464485" elapsed="0.000314"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.465238" level="INFO">${get_string} = "sal-bulk-flow:flows-per-dpn" : "1000"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "1000"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.464973" elapsed="0.000298"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.465768" level="INFO">${put_string} = "sal-bulk-flow:flows-per-dpn" : "100000"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "${flows_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.465442" elapsed="0.000354"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.466227" level="INFO">${json_body_get} = {
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "100000",
   "sal-bulk-flow:star...</msg>
<var>${json_body_get}</var>
<arg>${str}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.465967" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.466659" level="INFO">{
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "100000",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
</msg>
<arg>${json_body_get}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:06.466421" elapsed="0.000283"/>
</kw>
<return>
<value>${json_body_get}</value>
<status status="PASS" start="2026-04-16T01:46:06.466764" elapsed="0.000033"/>
</return>
<msg time="2026-04-16T01:46:06.466926" level="INFO">${temp_json_config_get} = {
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "100000",
   "sal-bulk-flow:star...</msg>
<var>${temp_json_config_get}</var>
<arg>${orig_json_config_get}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_after_add}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Get json file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.462638" elapsed="0.004314"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:06.467835" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_del_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/variables/openflowplugin/sal_del_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-04-16T01:46:06.467963" level="INFO">${body} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "1",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true"...</msg>
<var>${body}</var>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.467673" elapsed="0.000317"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.468414" level="INFO">${get_string} = "sal-bulk-flow:dpn-count" : "1"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "1"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.468161" elapsed="0.000280"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.468912" level="INFO">${put_string} = "sal-bulk-flow:dpn-count" : "32"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:dpn-count" : "${dpn_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.468608" elapsed="0.000330"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.469390" level="INFO">${str} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "1000",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true...</msg>
<var>${str}</var>
<arg>${body}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.469106" elapsed="0.000311"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.469856" level="INFO">${get_string} = "sal-bulk-flow:flows-per-dpn" : "1000"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "1000"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.469589" elapsed="0.000293"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.470330" level="INFO">${put_string} = "sal-bulk-flow:flows-per-dpn" : "3125"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:flows-per-dpn" : "${flows_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.470047" elapsed="0.000313"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.470812" level="INFO">${json_body_del} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "1",
   "sal-bulk-flow:seq" : "true...</msg>
<var>${json_body_del}</var>
<arg>${str}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.470528" elapsed="0.000311"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.471266" level="INFO">${get_string} = "sal-bulk-flow:batch-size" : "1"</msg>
<var>${get_string}</var>
<arg>"sal-bulk-flow:batch-size" : "1"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.471011" elapsed="0.000281"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.471761" level="INFO">${put_string} = "sal-bulk-flow:batch-size" : "3125"</msg>
<var>${put_string}</var>
<arg>"sal-bulk-flow:batch-size" : "${flows_count}"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:06.471459" elapsed="0.000329"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-16T01:46:06.472227" level="INFO">${json_body_del} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "t...</msg>
<var>${json_body_del}</var>
<arg>${json_body_del}</arg>
<arg>${get_string}</arg>
<arg>${put_string}</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.471963" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.472667" level="INFO">{
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
</msg>
<arg>${json_body_del}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:06.472424" elapsed="0.000303"/>
</kw>
<return>
<value>${json_body_del}</value>
<status status="PASS" start="2026-04-16T01:46:06.472771" elapsed="0.000033"/>
</return>
<msg time="2026-04-16T01:46:06.472932" level="INFO">${temp_json_config_del} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "t...</msg>
<var>${temp_json_config_del}</var>
<arg>${orig_json_config_del}</arg>
<arg>${switch_count}</arg>
<arg>${flow_count_per_switch}</arg>
<doc>Set new DPN count and flows count per DPN in the Bulkomatic Del json file.</doc>
<status status="PASS" start="2026-04-16T01:46:06.467262" elapsed="0.005696"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.473454" level="INFO">${temp_json_config_add} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "tr...</msg>
<arg>${temp_json_config_add}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:06.473124" elapsed="0.000373"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.473977" level="INFO">${temp_json_config_get} = {
"input" :
  {
   "sal-bulk-flow:verbose" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:is-config-ds" : "true",
   "sal-bulk-flow:flows-per-dpn" : "100000",
   "sal-bulk-flow:star...</msg>
<arg>${temp_json_config_get}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:06.473654" elapsed="0.000364"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.474490" level="INFO">${temp_json_config_del} = {
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "t...</msg>
<arg>${temp_json_config_del}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:06.474175" elapsed="0.000389"/>
</kw>
<doc>Initialize Variables and set the log.</doc>
<status status="PASS" start="2026-04-16T01:46:05.688991" elapsed="0.785692"/>
</test>
<test id="s1-t2" name="Start Mininet And verify Switches" line="53">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.476192" level="INFO">${ofport} = 6653</msg>
<var>${ofport}</var>
<arg>'${enable_openflow_tls}' == 'True'</arg>
<arg>6653</arg>
<arg>6633</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-16T01:46:06.475824" elapsed="0.000395"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.476770" level="INFO">${protocol} = ssl</msg>
<var>${protocol}</var>
<arg>'${enable_openflow_tls}' == 'True'</arg>
<arg>ssl</arg>
<arg>tcp</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-16T01:46:06.476404" elapsed="0.000392"/>
</kw>
<kw name="Start Mininet Multiple Controllers" owner="MininetKeywords">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.486925" level="INFO">${return_list_reference} = [1]</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-16T01:46:06.486528" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.487407" level="INFO">${return_list_copy} = [1]</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-16T01:46:06.487111" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-16T01:46:06.487476" elapsed="0.000030"/>
</return>
<msg time="2026-04-16T01:46:06.487631" level="INFO">${index_list} = [1]</msg>
<var>${index_list}</var>
<arg>given_list=${controller_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-16T01:46:06.486156" elapsed="0.001499"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.488043" 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-04-16T01:46:06.487834" elapsed="0.000253"/>
</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-04-16T01:46:06.490500" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:06.490230" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:06.490206" elapsed="0.000377"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:06.490895" 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-16T01:46:06.491008" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-16T01:46:06.490746" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.491558" level="INFO">Attempting to execute command "sudo mn -c" on remote system "10.30.171.54" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:06.491181" elapsed="0.000423"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:06.492146" level="INFO">${conn_id} = 3</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-16T01:46:06.491772" elapsed="0.000400"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-16T01:46:06.493225" level="INFO">Length is 0.</msg>
<msg time="2026-04-16T01:46:06.493306" 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-16T01:46:06.492791" elapsed="0.000539"/>
</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-16T01:46:06.493487" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-16T01:46:06.494794" level="INFO">Logging into '10.30.171.54:22' as 'jenkins'.</msg>
<msg time="2026-04-16T01:46:07.247487" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Thu Apr 16 01:46:06 UTC 2026

  System load:  0.19               Processes:             108
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.54
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-19040-691-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-16T01:46:06.494352" elapsed="0.753290"/>
</kw>
<msg time="2026-04-16T01:46:07.247747" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:06.493997" elapsed="0.753838"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-16T01:46:06.492386" elapsed="0.755558"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:07.248518" level="INFO">Executing command 'sudo mn -c'.</msg>
<msg time="2026-04-16T01:46:08.426875" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:08.427280" level="INFO">${stdout} = </msg>
<msg time="2026-04-16T01:46:08.427425" level="INFO">${stderr} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec iv...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:07.248257" elapsed="1.179229"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:08.428010" elapsed="0.000576"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:08.429691" level="INFO">*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes
killall controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
killall -9 controller ofprotocol ofdatapath ping nox_corelt-nox_core ovs-openflowd ovs-controllerovs-testcontroller udpbwtest mnexec ivs ryu-manager 2&gt; /dev/null
pkill -9 -f "sudo mnexec"
*** Removing junk from /tmp
rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log
*** Removing old X11 tunnels
*** Removing excess kernel datapaths
ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'
***  Removing OVS datapaths
ovs-vsctl --timeout=1 list-br
ovs-vsctl --timeout=1 list-br
*** Removing all links of the pattern foo-ethX
ip link show | egrep -o '([-_.[:alnum:]]+-eth[[:digit:]]+)'
ip link show
*** Killing stale mininet node processes
pkill -9 -f mininet:
*** Shutting down stale tunnels
pkill -9 -f Tunnel=Ethernet
pkill -9 -f .ssh/mn
rm -f ~/.ssh/mn/*
*** Cleanup complete.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:08.429035" elapsed="0.000809"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-16T01:46:08.430351" elapsed="0.000038"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:08.430043" elapsed="0.000417"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:08.429980" elapsed="0.000533"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-16T01:46:08.430909" elapsed="0.000071"/>
</return>
<status status="PASS" start="2026-04-16T01:46:08.430636" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:08.430599" elapsed="0.000513"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-16T01:46:08.431189" elapsed="0.000032"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.437031" elapsed="0.000331"/>
</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-16T01:46:08.437526" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:08.437866" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-16T01:46:08.431970" elapsed="0.006050"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-16T01:46:06.489677" elapsed="1.948434"/>
</kw>
<msg time="2026-04-16T01:46:08.438168" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:06.489121" elapsed="1.949104"/>
</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="PASS" start="2026-04-16T01:46:06.488625" elapsed="1.949679"/>
</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-04-16T01:46:08.440396" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:08.440130" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:08.440111" elapsed="0.000367"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.440804" 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-16T01:46:08.440910" level="INFO">${current_ssh_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-16T01:46:08.440636" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:08.441467" 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.171.54" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:08.441084" elapsed="0.000429"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.442059" level="INFO">${conn_id} = 5</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-16T01:46:08.441667" elapsed="0.000418"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-16T01:46:08.443050" level="INFO">Length is 0.</msg>
<msg time="2026-04-16T01:46:08.443129" 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-16T01:46:08.442766" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.443323" elapsed="0.000518"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.444690" level="INFO">Logging into '10.30.171.54:22' as 'jenkins'.</msg>
<msg time="2026-04-16T01:46:08.762650" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Thu Apr 16 01:46:06 UTC 2026

  System load:  0.19               Processes:             108
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.54
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Thu Apr 16 01:46:07 2026 from 10.30.170.108
[?2004h[jenkins@releng-19040-691-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-16T01:46:08.444376" elapsed="0.318434"/>
</kw>
<msg time="2026-04-16T01:46:08.762893" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.444012" elapsed="0.318964"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-16T01:46:08.442358" elapsed="0.320747"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.763628" 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-04-16T01:46:08.795944" level="INFO">Command exited with return code -1.</msg>
<msg time="2026-04-16T01:46:08.796228" level="INFO">${stdout} = </msg>
<msg time="2026-04-16T01:46:08.796326" level="INFO">${stderr} = </msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:08.763356" elapsed="0.033020"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:08.796807" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:08.798387" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:08.797757" elapsed="0.000722"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-16T01:46:08.799050" elapsed="0.000045"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:08.798676" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:08.798610" elapsed="0.000621"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-04-16T01:46:08.799593" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-04-16T01:46:08.799354" elapsed="0.000407"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:08.799319" elapsed="0.000500"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-04-16T01:46:08.799894" elapsed="0.000032"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.805296" elapsed="0.000480"/>
</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-16T01:46:08.806008" elapsed="0.000223"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:08.806436" elapsed="0.000134"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-16T01:46:08.800614" elapsed="0.006029"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-04-16T01:46:08.439582" elapsed="0.367209"/>
</kw>
<msg time="2026-04-16T01:46:08.806868" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.438994" elapsed="0.367946"/>
</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="PASS" start="2026-04-16T01:46:08.438479" elapsed="0.368586"/>
</kw>
<arg>${mininet}</arg>
<status status="PASS" start="2026-04-16T01:46:06.488282" elapsed="2.318861"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.814271" level="INFO">${tools_connection} = 7</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-16T01:46:08.813758" elapsed="0.000550"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-16T01:46:08.816488" level="INFO">Length is 0.</msg>
<msg time="2026-04-16T01:46:08.816568" 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-16T01:46:08.816210" 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-16T01:46:08.816763" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-16T01:46:08.818119" level="INFO">Logging into '10.30.171.54:22' as 'jenkins'.</msg>
<msg time="2026-04-16T01:46:09.161759" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Thu Apr 16 01:46:06 UTC 2026

  System load:  0.19               Processes:             108
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.54
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Thu Apr 16 01:46:08 2026 from 10.30.170.108
[?2004h[jenkins@releng-19040-691-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-16T01:46:08.817609" elapsed="0.344245"/>
</kw>
<msg time="2026-04-16T01:46:09.161928" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.817251" elapsed="0.344737"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-16T01:46:08.815707" elapsed="0.346376"/>
</kw>
<msg time="2026-04-16T01:46:09.162133" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:08.815251" elapsed="0.346927"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-16T01:46:08.814643" elapsed="0.347607"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-04-16T01:46:09.162292" elapsed="0.000031"/>
</return>
<msg time="2026-04-16T01:46:09.162475" level="INFO">${mininet_conn_id} = 7</msg>
<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="PASS" start="2026-04-16T01:46:08.813066" elapsed="0.349434"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:09.163149" level="INFO">${mininet_conn_id} = 7</msg>
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:09.162756" elapsed="0.000435"/>
</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-04-16T01:46:09.165481" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:09.163267" elapsed="0.002269"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:09.163247" elapsed="0.002314"/>
</if>
<if>
<branch type="IF" condition="'${protocol}' == 'ssl'">
<kw name="Install Certificates In Mininet" owner="MininetKeywords">
<kw name="Comment" owner="BuiltIn">
<arg>Copy Certificates</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-16T01:46:09.166206" elapsed="0.000213"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.177879" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-16T01:46:09.185826" level="INFO">'/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/switch.key' -&gt; '/home/jenkins//switch.key'</msg>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/${switch_private_key}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-16T01:46:09.166577" elapsed="0.019387"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.192460" level="INFO">'/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/switch.crt' -&gt; '/home/jenkins//switch.crt'</msg>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/${switch_certificate}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-16T01:46:09.186368" elapsed="0.006194"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.198754" level="INFO">'/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/cachain.crt' -&gt; '/home/jenkins//cachain.crt'</msg>
<arg>/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/test/csit/libraries/tls/${controller_ca_list}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-16T01:46:09.192825" elapsed="0.006010"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>Install Certificates</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-16T01:46:09.199074" elapsed="0.000301"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.199898" level="INFO">Executing command 'sudo mv switch.key /etc/openvswitch &amp;&amp; sudo mv switch.crt /etc/openvswitch &amp;&amp; sudo mv cachain.crt /etc/openvswitch'.</msg>
<msg time="2026-04-16T01:46:09.242524" level="INFO">Command exited with return code 0.</msg>
<arg>sudo mv ${switch_private_key} /etc/openvswitch &amp;&amp; sudo mv ${switch_certificate} /etc/openvswitch &amp;&amp; sudo mv ${controller_ca_list} /etc/openvswitch</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:09.199596" elapsed="0.043110"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.243582" level="INFO">Executing command 'sudo ovs-vsctl set-ssl /etc/openvswitch/switch.key /etc/openvswitch/switch.crt /etc/openvswitch/cachain.crt'.</msg>
<msg time="2026-04-16T01:46:09.309037" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-ssl /etc/openvswitch/${switch_private_key} /etc/openvswitch/${switch_certificate} /etc/openvswitch/${controller_ca_list}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:09.243124" elapsed="0.066136"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.309914" level="INFO">Executing command 'sudo ovs-vsctl get-ssl'.</msg>
<msg time="2026-04-16T01:46:09.371001" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:09.371232" level="INFO">${std_out} = Private key: /etc/openvswitch/switch.key
Certificate: /etc/openvswitch/switch.crt
CA Certificate: /etc/openvswitch/cachain.crt
Bootstrap: false</msg>
<var>${std_out}</var>
<arg>sudo ovs-vsctl get-ssl</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:09.309645" elapsed="0.061648"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:09.372329" level="INFO">Private key: /etc/openvswitch/switch.key
Certificate: /etc/openvswitch/switch.crt
CA Certificate: /etc/openvswitch/cachain.crt
Bootstrap: false</msg>
<arg>${std_out}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:09.371684" elapsed="0.000753"/>
</kw>
<doc>Copy and install certificates in simulator.</doc>
<status status="PASS" start="2026-04-16T01:46:09.165916" elapsed="0.206650"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:09.165617" elapsed="0.207011"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:09.165601" elapsed="0.207087"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:09.373658" level="INFO">Start mininet --topo linear,32</msg>
<arg>Start mininet ${options}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:09.373070" elapsed="0.000728"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-16T01:46:09.409281" level="INFO">sudo mn --topo linear,32</msg>
<arg>sudo mn ${options}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-16T01:46:09.374137" elapsed="0.035202"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.343821" level="INFO">[?2004l*** No default OpenFlow controller found for default switch!
*** Falling back to OVS Bridge
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 
*** Adding links:
(h1, s1) (h2, s2) (h3, s3) (h4, s4) (h5, s5) (h6, s6) (h7, s7) (h8, s8) (h9, s9) (h10, s10) (h11, s11) (h12, s12) (h13, s13) (h14, s14) (h15, s15) (h16, s16) (h17, s17) (h18, s18) (h19, s19) (h20, s20) (h21, s21) (h22, s22) (h23, s23) (h24, s24) (h25, s25) (h26, s26) (h27, s27) (h28, s28) (h29, s29) (h30, s30) (h31, s31) (h32, s32) (s2, s1) (s3, s2) (s4, s3) (s5, s4) (s6, s5) (s7, s6) (s8, s7) (s9, s8) (s10, s9) (s11, s10) (s12, s11) (s13, s12) (s14, s13) (s15, s14) (s16, s15) (s17, s16) (s18, s17) (s19, s18) (s20, s19) (s21, s20) (s22, s21) (s23, s22) (s24, s23) (s25, s24) (s26, s25) (s27, s26) (s28, s27) (s29, s28) (s30, s29) (s31, s30) (s32, s31) 
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 
*** Starting controller

*** Starting 32 switches
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 ...
*** Starting CLI:
mininet&gt;</msg>
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-04-16T01:46:09.409495" elapsed="1.934567"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.344800" level="INFO">Create controller configuration</msg>
<arg>Create controller configuration</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:11.344417" elapsed="0.000432"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.345355" level="INFO">${controller_opt} = </msg>
<var>${controller_opt}</var>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:11.345076" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.346295" level="INFO">${controller_opt} =   ssl:10.30.170.129:6653</msg>
<var>${controller_opt}</var>
<arg>${controller_opt}</arg>
<arg>${SPACE}${protocol}:${ODL_SYSTEM_${index}_IP}:${ofport}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="PASS" start="2026-04-16T01:46:11.345830" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.346808" level="INFO">  ssl:10.30.170.129:6653</msg>
<arg>${controller_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:11.346494" elapsed="0.000366"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-04-16T01:46:11.345652" elapsed="0.001242"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-04-16T01:46:11.345451" elapsed="0.001479"/>
</for>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.347313" level="INFO">Open extra SSH connection to configure the OVS bridges</msg>
<arg>Open extra SSH connection to configure the OVS bridges</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:11.347100" elapsed="0.000259"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.353163" level="INFO">${tools_connection} = 8</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-16T01:46:11.352686" elapsed="0.000506"/>
</kw>
<kw name="Flexible_Mininet_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.355021" level="INFO">Length is 0.</msg>
<msg time="2026-04-16T01:46:11.355101" 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-16T01:46:11.354727" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:11.355287" elapsed="0.000354"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.356540" level="INFO">Logging into '10.30.171.54:22' as 'jenkins'.</msg>
<msg time="2026-04-16T01:46:11.698393" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

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

 System information as of Thu Apr 16 01:46:06 UTC 2026

  System load:  0.19               Processes:             108
  Usage of /:   19.3% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.54
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Thu Apr 16 01:46:09 2026 from 10.30.170.108
[?2004h[jenkins@releng-19040-691-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-16T01:46:11.356193" elapsed="0.342470"/>
</kw>
<msg time="2026-04-16T01:46:11.698769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:11.355830" elapsed="0.343056"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-16T01:46:11.354202" elapsed="0.344832"/>
</kw>
<msg time="2026-04-16T01:46:11.699091" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:11.353793" elapsed="0.345348"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-16T01:46:11.353376" elapsed="0.345840"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-04-16T01:46:11.699270" elapsed="0.000043"/>
</return>
<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="PASS" start="2026-04-16T01:46:11.352147" elapsed="0.347302"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.699868" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | wc -l'.</msg>
<msg time="2026-04-16T01:46:11.772673" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:11.773133" level="INFO">${num_bridges} = 32</msg>
<var>${num_bridges}</var>
<arg>sudo ovs-vsctl show | grep Bridge | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:11.699691" elapsed="0.073510"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.774745" level="INFO">${num_bridges} = 32</msg>
<var>${num_bridges}</var>
<arg>${num_bridges}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-16T01:46:11.773780" elapsed="0.001035"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-16T01:46:11.775987" level="INFO">${bridges} = []</msg>
<var>${bridges}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-16T01:46:11.775232" elapsed="0.000821"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.782681" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -1 | tail -1'.</msg>
<msg time="2026-04-16T01:46:11.844695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:11.844978" level="INFO">${bridge} = s1</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:11.782478" elapsed="0.062554"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:11.846071" level="INFO">Executing command 'sudo ovs-vsctl del-controller s1 &amp;&amp; sudo ovs-vsctl set bridge s1 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:12.092942" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:11.845406" elapsed="0.247775"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:12.093760" elapsed="0.000581"/>
</kw>
<var name="${i}">1</var>
<status status="PASS" start="2026-04-16T01:46:11.782258" elapsed="0.312184"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.095430" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -2 | tail -1'.</msg>
<msg time="2026-04-16T01:46:12.347529" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:12.347903" level="INFO">${bridge} = s10</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.095092" elapsed="0.252871"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.349205" level="INFO">Executing command 'sudo ovs-vsctl del-controller s10 &amp;&amp; sudo ovs-vsctl set bridge s10 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:12.511764" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.348483" elapsed="0.163493"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:12.512686" elapsed="0.000679"/>
</kw>
<var name="${i}">2</var>
<status status="PASS" start="2026-04-16T01:46:12.094756" elapsed="0.418703"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.514443" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -3 | tail -1'.</msg>
<msg time="2026-04-16T01:46:12.581252" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:12.581489" level="INFO">${bridge} = s11</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.514126" elapsed="0.067422"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.582619" level="INFO">Executing command 'sudo ovs-vsctl del-controller s11 &amp;&amp; sudo ovs-vsctl set bridge s11 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:12.683377" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.581980" elapsed="0.101584"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:12.684080" elapsed="0.000567"/>
</kw>
<var name="${i}">3</var>
<status status="PASS" start="2026-04-16T01:46:12.513768" elapsed="0.171002"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.685676" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -4 | tail -1'.</msg>
<msg time="2026-04-16T01:46:12.753319" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:12.753602" level="INFO">${bridge} = s12</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.685355" elapsed="0.068480"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.754976" level="INFO">Executing command 'sudo ovs-vsctl del-controller s12 &amp;&amp; sudo ovs-vsctl set bridge s12 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:12.851567" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.754271" elapsed="0.097472"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:12.852165" elapsed="0.000481"/>
</kw>
<var name="${i}">4</var>
<status status="PASS" start="2026-04-16T01:46:12.685033" elapsed="0.167732"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.853658" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -5 | tail -1'.</msg>
<msg time="2026-04-16T01:46:12.917333" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:12.917563" level="INFO">${bridge} = s13</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.853355" elapsed="0.064263"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:12.918788" level="INFO">Executing command 'sudo ovs-vsctl del-controller s13 &amp;&amp; sudo ovs-vsctl set bridge s13 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.019233" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:12.918097" elapsed="0.101284"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.019791" elapsed="0.000527"/>
</kw>
<var name="${i}">5</var>
<status status="PASS" start="2026-04-16T01:46:12.853032" elapsed="0.167379"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.021337" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -6 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.084893" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.085123" level="INFO">${bridge} = s14</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.021012" elapsed="0.064177"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.086275" level="INFO">Executing command 'sudo ovs-vsctl del-controller s14 &amp;&amp; sudo ovs-vsctl set bridge s14 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.193390" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.085589" elapsed="0.107940"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.193956" elapsed="0.000468"/>
</kw>
<var name="${i}">6</var>
<status status="PASS" start="2026-04-16T01:46:13.020657" elapsed="0.173856"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.195436" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -7 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.261294" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.261528" level="INFO">${bridge} = s15</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.195128" elapsed="0.066455"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.262638" level="INFO">Executing command 'sudo ovs-vsctl del-controller s15 &amp;&amp; sudo ovs-vsctl set bridge s15 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.403770" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.262010" elapsed="0.141913"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.404288" elapsed="0.000488"/>
</kw>
<var name="${i}">7</var>
<status status="PASS" start="2026-04-16T01:46:13.194784" elapsed="0.210082"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.405902" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -8 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.477120" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.477340" level="INFO">${bridge} = s16</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.405520" elapsed="0.071875"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.478423" level="INFO">Executing command 'sudo ovs-vsctl del-controller s16 &amp;&amp; sudo ovs-vsctl set bridge s16 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.573522" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.477802" elapsed="0.095862"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.574067" elapsed="0.000440"/>
</kw>
<var name="${i}">8</var>
<status status="PASS" start="2026-04-16T01:46:13.405106" elapsed="0.169488"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.575476" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -9 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.640954" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.641173" level="INFO">${bridge} = s17</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.575173" elapsed="0.066056"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.642405" level="INFO">Executing command 'sudo ovs-vsctl del-controller s17 &amp;&amp; sudo ovs-vsctl set bridge s17 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.729216" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.641744" elapsed="0.087652"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.729857" elapsed="0.000503"/>
</kw>
<var name="${i}">9</var>
<status status="PASS" start="2026-04-16T01:46:13.574855" elapsed="0.155608"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.731466" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -10 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.800772" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.801075" level="INFO">${bridge} = s18</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.731122" elapsed="0.069994"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.802012" level="INFO">Executing command 'sudo ovs-vsctl del-controller s18 &amp;&amp; sudo ovs-vsctl set bridge s18 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:13.904085" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.801499" elapsed="0.102888"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:13.905110" elapsed="0.000649"/>
</kw>
<var name="${i}">10</var>
<status status="PASS" start="2026-04-16T01:46:13.730797" elapsed="0.175062"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.906878" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -11 | tail -1'.</msg>
<msg time="2026-04-16T01:46:13.972978" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:13.973240" level="INFO">${bridge} = s19</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.906508" elapsed="0.066793"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:13.974529" level="INFO">Executing command 'sudo ovs-vsctl del-controller s19 &amp;&amp; sudo ovs-vsctl set bridge s19 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.075215" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:13.973804" elapsed="0.101664"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.076009" elapsed="0.000683"/>
</kw>
<var name="${i}">11</var>
<status status="PASS" start="2026-04-16T01:46:13.906143" elapsed="0.170706"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.077838" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -12 | tail -1'.</msg>
<msg time="2026-04-16T01:46:14.141688" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:14.142054" level="INFO">${bridge} = s2</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.077489" elapsed="0.064625"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.143500" level="INFO">Executing command 'sudo ovs-vsctl del-controller s2 &amp;&amp; sudo ovs-vsctl set bridge s2 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.229672" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.142672" elapsed="0.087233"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.230376" elapsed="0.000587"/>
</kw>
<var name="${i}">12</var>
<status status="PASS" start="2026-04-16T01:46:14.077116" elapsed="0.153941"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.232088" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -13 | tail -1'.</msg>
<msg time="2026-04-16T01:46:14.315527" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:14.315889" level="INFO">${bridge} = s20</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.231761" elapsed="0.084197"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.317195" level="INFO">Executing command 'sudo ovs-vsctl del-controller s20 &amp;&amp; sudo ovs-vsctl set bridge s20 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.460222" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.316445" elapsed="0.144016"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.461064" elapsed="0.000598"/>
</kw>
<var name="${i}">13</var>
<status status="PASS" start="2026-04-16T01:46:14.231367" elapsed="0.230468"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.462952" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -14 | tail -1'.</msg>
<msg time="2026-04-16T01:46:14.532929" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:14.533208" level="INFO">${bridge} = s21</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.462528" elapsed="0.070741"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.534449" level="INFO">Executing command 'sudo ovs-vsctl del-controller s21 &amp;&amp; sudo ovs-vsctl set bridge s21 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.635284" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.533696" elapsed="0.101854"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.635986" elapsed="0.000480"/>
</kw>
<var name="${i}">14</var>
<status status="PASS" start="2026-04-16T01:46:14.462113" elapsed="0.174443"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.637458" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -15 | tail -1'.</msg>
<msg time="2026-04-16T01:46:14.708969" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:14.709233" level="INFO">${bridge} = s22</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.637152" elapsed="0.072137"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.710383" level="INFO">Executing command 'sudo ovs-vsctl del-controller s22 &amp;&amp; sudo ovs-vsctl set bridge s22 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.807175" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.709697" elapsed="0.097631"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.807763" elapsed="0.000481"/>
</kw>
<var name="${i}">15</var>
<status status="PASS" start="2026-04-16T01:46:14.636831" elapsed="0.171502"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.809241" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -16 | tail -1'.</msg>
<msg time="2026-04-16T01:46:14.873141" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:14.873400" level="INFO">${bridge} = s23</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.808929" elapsed="0.064529"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.874554" level="INFO">Executing command 'sudo ovs-vsctl del-controller s23 &amp;&amp; sudo ovs-vsctl set bridge s23 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:14.961237" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.873906" elapsed="0.087504"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:14.961869" elapsed="0.000507"/>
</kw>
<var name="${i}">16</var>
<status status="PASS" start="2026-04-16T01:46:14.808575" elapsed="0.153890"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:14.963394" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -17 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.047329" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.047570" level="INFO">${bridge} = s24</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:14.963087" elapsed="0.084538"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.048688" level="INFO">Executing command 'sudo ovs-vsctl del-controller s24 &amp;&amp; sudo ovs-vsctl set bridge s24 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:15.157276" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.048056" elapsed="0.109432"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:15.157984" elapsed="0.000517"/>
</kw>
<var name="${i}">17</var>
<status status="PASS" start="2026-04-16T01:46:14.962741" elapsed="0.195853"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.159645" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -18 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.228675" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.228958" level="INFO">${bridge} = s25</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.159250" elapsed="0.069778"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.230099" level="INFO">Executing command 'sudo ovs-vsctl del-controller s25 &amp;&amp; sudo ovs-vsctl set bridge s25 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:15.335359" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.229416" elapsed="0.106155"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:15.336088" elapsed="0.000536"/>
</kw>
<var name="${i}">18</var>
<status status="PASS" start="2026-04-16T01:46:15.158918" elapsed="0.177824"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.337625" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -19 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.405815" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.406128" level="INFO">${bridge} = s26</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.337321" elapsed="0.068863"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.407384" level="INFO">Executing command 'sudo ovs-vsctl del-controller s26 &amp;&amp; sudo ovs-vsctl set bridge s26 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:15.541508" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.406673" elapsed="0.135080"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:15.542319" elapsed="0.000581"/>
</kw>
<var name="${i}">19</var>
<status status="PASS" start="2026-04-16T01:46:15.337004" elapsed="0.205989"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.543902" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -20 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.616964" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.617200" level="INFO">${bridge} = s27</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.543556" elapsed="0.073702"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.618342" level="INFO">Executing command 'sudo ovs-vsctl del-controller s27 &amp;&amp; sudo ovs-vsctl set bridge s27 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:15.709530" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.617660" elapsed="0.092047"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:15.710177" elapsed="0.000568"/>
</kw>
<var name="${i}">20</var>
<status status="PASS" start="2026-04-16T01:46:15.543239" elapsed="0.167600"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.711758" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -21 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.785399" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.785683" level="INFO">${bridge} = s28</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.711424" elapsed="0.074354"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.786950" level="INFO">Executing command 'sudo ovs-vsctl del-controller s28 &amp;&amp; sudo ovs-vsctl set bridge s28 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:15.877856" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.786209" elapsed="0.091790"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:15.878379" elapsed="0.000582"/>
</kw>
<var name="${i}">21</var>
<status status="PASS" start="2026-04-16T01:46:15.711088" elapsed="0.167964"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.879943" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -22 | tail -1'.</msg>
<msg time="2026-04-16T01:46:15.953427" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:15.953810" level="INFO">${bridge} = s29</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.879612" elapsed="0.074261"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:15.955294" level="INFO">Executing command 'sudo ovs-vsctl del-controller s29 &amp;&amp; sudo ovs-vsctl set bridge s29 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.059500" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:15.954447" elapsed="0.105250"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.060188" elapsed="0.000564"/>
</kw>
<var name="${i}">22</var>
<status status="PASS" start="2026-04-16T01:46:15.879300" elapsed="0.181561"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.061876" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -23 | tail -1'.</msg>
<msg time="2026-04-16T01:46:16.133017" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:16.133329" level="INFO">${bridge} = s3</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.061508" elapsed="0.071880"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.136005" level="INFO">Executing command 'sudo ovs-vsctl del-controller s3 &amp;&amp; sudo ovs-vsctl set bridge s3 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.235920" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.133920" elapsed="0.102286"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.236773" elapsed="0.000614"/>
</kw>
<var name="${i}">23</var>
<status status="PASS" start="2026-04-16T01:46:16.061124" elapsed="0.176358"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.238492" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -24 | tail -1'.</msg>
<msg time="2026-04-16T01:46:16.305293" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:16.305635" level="INFO">${bridge} = s30</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.238117" elapsed="0.067576"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.307331" level="INFO">Executing command 'sudo ovs-vsctl del-controller s30 &amp;&amp; sudo ovs-vsctl set bridge s30 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.403359" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.306340" elapsed="0.097189"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.404069" elapsed="0.000561"/>
</kw>
<var name="${i}">24</var>
<status status="PASS" start="2026-04-16T01:46:16.237777" elapsed="0.167145"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.406002" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -25 | tail -1'.</msg>
<msg time="2026-04-16T01:46:16.469190" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:16.469498" level="INFO">${bridge} = s31</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.405617" elapsed="0.063942"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.470863" level="INFO">Executing command 'sudo ovs-vsctl del-controller s31 &amp;&amp; sudo ovs-vsctl set bridge s31 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.626233" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.470053" elapsed="0.156396"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.626967" elapsed="0.000547"/>
</kw>
<var name="${i}">25</var>
<status status="PASS" start="2026-04-16T01:46:16.405245" elapsed="0.222360"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.628533" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -26 | tail -1'.</msg>
<msg time="2026-04-16T01:46:16.705032" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:16.705307" level="INFO">${bridge} = s32</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.628219" elapsed="0.077159"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.706680" level="INFO">Executing command 'sudo ovs-vsctl del-controller s32 &amp;&amp; sudo ovs-vsctl set bridge s32 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.807675" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.705905" elapsed="0.102055"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.808458" elapsed="0.000607"/>
</kw>
<var name="${i}">26</var>
<status status="PASS" start="2026-04-16T01:46:16.627893" elapsed="0.181267"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.810146" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -27 | tail -1'.</msg>
<msg time="2026-04-16T01:46:16.885139" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:16.885518" level="INFO">${bridge} = s4</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.809795" elapsed="0.075787"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.886970" level="INFO">Executing command 'sudo ovs-vsctl del-controller s4 &amp;&amp; sudo ovs-vsctl set bridge s4 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:16.977355" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.886194" elapsed="0.091365"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:16.978099" elapsed="0.000656"/>
</kw>
<var name="${i}">27</var>
<status status="PASS" start="2026-04-16T01:46:16.809417" elapsed="0.169438"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:16.979842" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -28 | tail -1'.</msg>
<msg time="2026-04-16T01:46:17.048969" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:17.049209" level="INFO">${bridge} = s5</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:16.979488" elapsed="0.069777"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.050366" level="INFO">Executing command 'sudo ovs-vsctl del-controller s5 &amp;&amp; sudo ovs-vsctl set bridge s5 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:17.137072" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.049654" elapsed="0.087627"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:17.137781" elapsed="0.001003"/>
</kw>
<var name="${i}">28</var>
<status status="PASS" start="2026-04-16T01:46:16.979116" elapsed="0.159805"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.140011" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -29 | tail -1'.</msg>
<msg time="2026-04-16T01:46:17.212842" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:17.213097" level="INFO">${bridge} = s6</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.139617" elapsed="0.073541"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.214293" level="INFO">Executing command 'sudo ovs-vsctl del-controller s6 &amp;&amp; sudo ovs-vsctl set bridge s6 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:17.311419" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.213564" elapsed="0.097998"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:17.311995" elapsed="0.000463"/>
</kw>
<var name="${i}">29</var>
<status status="PASS" start="2026-04-16T01:46:17.139205" elapsed="0.173351"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.313548" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -30 | tail -1'.</msg>
<msg time="2026-04-16T01:46:17.381355" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:17.381580" level="INFO">${bridge} = s7</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.313232" elapsed="0.068413"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.382783" level="INFO">Executing command 'sudo ovs-vsctl del-controller s7 &amp;&amp; sudo ovs-vsctl set bridge s7 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:17.469045" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.382126" elapsed="0.087060"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:17.469579" elapsed="0.000491"/>
</kw>
<var name="${i}">30</var>
<status status="PASS" start="2026-04-16T01:46:17.312874" elapsed="0.157286"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.471023" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -31 | tail -1'.</msg>
<msg time="2026-04-16T01:46:17.540957" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:17.541192" level="INFO">${bridge} = s8</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.470697" elapsed="0.070571"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.542335" level="INFO">Executing command 'sudo ovs-vsctl del-controller s8 &amp;&amp; sudo ovs-vsctl set bridge s8 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:17.684065" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.541669" elapsed="0.142577"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:17.684585" elapsed="0.000440"/>
</kw>
<var name="${i}">31</var>
<status status="PASS" start="2026-04-16T01:46:17.470384" elapsed="0.214693"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.685626" level="INFO">Executing command 'sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -32 | tail -1'.</msg>
<msg time="2026-04-16T01:46:17.753575" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:17.753939" level="INFO">${bridge} = s9</msg>
<var>${bridge}</var>
<arg>sudo ovs-vsctl show | grep Bridge | cut -c 12- | sort | head -${i} | tail -1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.685437" elapsed="0.068551"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.754995" level="INFO">Executing command 'sudo ovs-vsctl del-controller s9 &amp;&amp; sudo ovs-vsctl set bridge s9 protocols=OpenFlow13'.</msg>
<msg time="2026-04-16T01:46:17.845248" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl del-controller ${bridge} &amp;&amp; sudo ovs-vsctl set bridge ${bridge} protocols=OpenFlow${ofversion}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.754403" elapsed="0.091001"/>
</kw>
<kw name="Append To List" owner="Collections">
<arg>${bridges}</arg>
<arg>${bridge}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:17.845766" elapsed="0.000407"/>
</kw>
<var name="${i}">32</var>
<status status="PASS" start="2026-04-16T01:46:17.685243" elapsed="0.160990"/>
</iter>
<var>${i}</var>
<value>1</value>
<value>${num_bridges+1}</value>
<status status="PASS" start="2026-04-16T01:46:11.776194" elapsed="6.070096"/>
</for>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:17.847062" level="INFO">Configure OVS controllers   ssl:10.30.170.129:6653 in all bridges</msg>
<arg>Configure OVS controllers ${controller_opt} in all bridges</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:17.846598" elapsed="0.000531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.847919" level="INFO">Executing command 'sudo ovs-vsctl set-controller s1   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:17.932926" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.847648" elapsed="0.085480"/>
</kw>
<var name="${bridge}">s1</var>
<status status="PASS" start="2026-04-16T01:46:17.847440" elapsed="0.085808"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:17.934345" level="INFO">Executing command 'sudo ovs-vsctl set-controller s10   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.011605" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:17.933911" elapsed="0.077942"/>
</kw>
<var name="${bridge}">s10</var>
<status status="PASS" start="2026-04-16T01:46:17.933502" elapsed="0.078459"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.013112" level="INFO">Executing command 'sudo ovs-vsctl set-controller s11   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.091289" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.012654" elapsed="0.078791"/>
</kw>
<var name="${bridge}">s11</var>
<status status="PASS" start="2026-04-16T01:46:18.012268" elapsed="0.079246"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.092223" level="INFO">Executing command 'sudo ovs-vsctl set-controller s12   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.171257" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.091974" elapsed="0.079460"/>
</kw>
<var name="${bridge}">s12</var>
<status status="PASS" start="2026-04-16T01:46:18.091699" elapsed="0.079814"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.172318" level="INFO">Executing command 'sudo ovs-vsctl set-controller s13   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.251543" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.172032" elapsed="0.079706"/>
</kw>
<var name="${bridge}">s13</var>
<status status="PASS" start="2026-04-16T01:46:18.171767" elapsed="0.080057"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.252798" level="INFO">Executing command 'sudo ovs-vsctl set-controller s14   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.335531" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.252446" elapsed="0.083344"/>
</kw>
<var name="${bridge}">s14</var>
<status status="PASS" start="2026-04-16T01:46:18.252150" elapsed="0.083755"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.337135" level="INFO">Executing command 'sudo ovs-vsctl set-controller s15   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.419238" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.336634" elapsed="0.082832"/>
</kw>
<var name="${bridge}">s15</var>
<status status="PASS" start="2026-04-16T01:46:18.336214" elapsed="0.083361"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.420756" level="INFO">Executing command 'sudo ovs-vsctl set-controller s16   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.493590" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.420286" elapsed="0.073522"/>
</kw>
<var name="${bridge}">s16</var>
<status status="PASS" start="2026-04-16T01:46:18.419902" elapsed="0.074018"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.494881" level="INFO">Executing command 'sudo ovs-vsctl set-controller s17   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.585009" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.494519" elapsed="0.090652"/>
</kw>
<var name="${bridge}">s17</var>
<status status="PASS" start="2026-04-16T01:46:18.494180" elapsed="0.091064"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.586067" level="INFO">Executing command 'sudo ovs-vsctl set-controller s18   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.659408" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.585753" elapsed="0.073769"/>
</kw>
<var name="${bridge}">s18</var>
<status status="PASS" start="2026-04-16T01:46:18.585457" elapsed="0.074122"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.660159" level="INFO">Executing command 'sudo ovs-vsctl set-controller s19   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.783356" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.659944" elapsed="0.123621"/>
</kw>
<var name="${bridge}">s19</var>
<status status="PASS" start="2026-04-16T01:46:18.659737" elapsed="0.123931"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.785006" level="INFO">Executing command 'sudo ovs-vsctl set-controller s2   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.866667" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.784554" elapsed="0.082313"/>
</kw>
<var name="${bridge}">s2</var>
<status status="PASS" start="2026-04-16T01:46:18.783965" elapsed="0.082992"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.867983" level="INFO">Executing command 'sudo ovs-vsctl set-controller s20   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:18.946909" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.867540" elapsed="0.079522"/>
</kw>
<var name="${bridge}">s20</var>
<status status="PASS" start="2026-04-16T01:46:18.867184" elapsed="0.079964"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:18.948126" level="INFO">Executing command 'sudo ovs-vsctl set-controller s21   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.012948" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:18.947698" elapsed="0.065363"/>
</kw>
<var name="${bridge}">s21</var>
<status status="PASS" start="2026-04-16T01:46:18.947361" elapsed="0.065762"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.013862" level="INFO">Executing command 'sudo ovs-vsctl set-controller s22   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.094543" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.013557" elapsed="0.081151"/>
</kw>
<var name="${bridge}">s22</var>
<status status="PASS" start="2026-04-16T01:46:19.013280" elapsed="0.081536"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.095617" level="INFO">Executing command 'sudo ovs-vsctl set-controller s23   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.164666" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.095316" elapsed="0.069533"/>
</kw>
<var name="${bridge}">s23</var>
<status status="PASS" start="2026-04-16T01:46:19.095018" elapsed="0.069915"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.165918" level="INFO">Executing command 'sudo ovs-vsctl set-controller s24   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.240930" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.165502" elapsed="0.075615"/>
</kw>
<var name="${bridge}">s24</var>
<status status="PASS" start="2026-04-16T01:46:19.165173" elapsed="0.076039"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.242291" level="INFO">Executing command 'sudo ovs-vsctl set-controller s25   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.319311" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.241879" elapsed="0.077601"/>
</kw>
<var name="${bridge}">s25</var>
<status status="PASS" start="2026-04-16T01:46:19.241466" elapsed="0.078107"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.320773" level="INFO">Executing command 'sudo ovs-vsctl set-controller s26   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.403142" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.320307" elapsed="0.083026"/>
</kw>
<var name="${bridge}">s26</var>
<status status="PASS" start="2026-04-16T01:46:19.319953" elapsed="0.083481"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.404583" level="INFO">Executing command 'sudo ovs-vsctl set-controller s27   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.473605" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.404127" elapsed="0.069724"/>
</kw>
<var name="${bridge}">s27</var>
<status status="PASS" start="2026-04-16T01:46:19.403688" elapsed="0.070267"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.475106" level="INFO">Executing command 'sudo ovs-vsctl set-controller s28   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.559173" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.474606" elapsed="0.084660"/>
</kw>
<var name="${bridge}">s28</var>
<status status="PASS" start="2026-04-16T01:46:19.474215" elapsed="0.085106"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.559963" level="INFO">Executing command 'sudo ovs-vsctl set-controller s29   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.624626" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.559694" elapsed="0.065158"/>
</kw>
<var name="${bridge}">s29</var>
<status status="PASS" start="2026-04-16T01:46:19.559453" elapsed="0.065494"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.625994" level="INFO">Executing command 'sudo ovs-vsctl set-controller s3   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.710819" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.625544" elapsed="0.085468"/>
</kw>
<var name="${bridge}">s3</var>
<status status="PASS" start="2026-04-16T01:46:19.625192" elapsed="0.085922"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.712213" level="INFO">Executing command 'sudo ovs-vsctl set-controller s30   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.786821" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.711785" elapsed="0.075215"/>
</kw>
<var name="${bridge}">s30</var>
<status status="PASS" start="2026-04-16T01:46:19.711361" elapsed="0.075732"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.788134" level="INFO">Executing command 'sudo ovs-vsctl set-controller s31   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.866893" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.787707" elapsed="0.079375"/>
</kw>
<var name="${bridge}">s31</var>
<status status="PASS" start="2026-04-16T01:46:19.787330" elapsed="0.079856"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.868359" level="INFO">Executing command 'sudo ovs-vsctl set-controller s32   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:19.947421" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.867927" elapsed="0.079705"/>
</kw>
<var name="${bridge}">s32</var>
<status status="PASS" start="2026-04-16T01:46:19.867480" elapsed="0.080356"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:19.949027" level="INFO">Executing command 'sudo ovs-vsctl set-controller s4   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.023405" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:19.948558" elapsed="0.075060"/>
</kw>
<var name="${bridge}">s4</var>
<status status="PASS" start="2026-04-16T01:46:19.948157" elapsed="0.075602"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.024879" level="INFO">Executing command 'sudo ovs-vsctl set-controller s5   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.093368" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.024427" elapsed="0.069118"/>
</kw>
<var name="${bridge}">s5</var>
<status status="PASS" start="2026-04-16T01:46:20.024058" elapsed="0.069571"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.094439" level="INFO">Executing command 'sudo ovs-vsctl set-controller s6   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.168891" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.094159" elapsed="0.074950"/>
</kw>
<var name="${bridge}">s6</var>
<status status="PASS" start="2026-04-16T01:46:20.093863" elapsed="0.075353"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.170343" level="INFO">Executing command 'sudo ovs-vsctl set-controller s7   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.255115" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.169916" elapsed="0.085388"/>
</kw>
<var name="${bridge}">s7</var>
<status status="PASS" start="2026-04-16T01:46:20.169493" elapsed="0.085893"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.256209" level="INFO">Executing command 'sudo ovs-vsctl set-controller s8   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.335457" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.255917" elapsed="0.079752"/>
</kw>
<var name="${bridge}">s8</var>
<status status="PASS" start="2026-04-16T01:46:20.255608" elapsed="0.080217"/>
</iter>
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.337102" level="INFO">Executing command 'sudo ovs-vsctl set-controller s9   ssl:10.30.170.129:6653'.</msg>
<msg time="2026-04-16T01:46:20.415605" level="INFO">Command exited with return code 0.</msg>
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.336630" elapsed="0.079147"/>
</kw>
<var name="${bridge}">s9</var>
<status status="PASS" start="2026-04-16T01:46:20.336232" elapsed="0.079629"/>
</iter>
<var>${bridge}</var>
<value>@{bridges}</value>
<status status="PASS" start="2026-04-16T01:46:17.847217" elapsed="2.568715"/>
</for>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:20.416958" level="INFO">Check OVS configuratiom</msg>
<arg>Check OVS configuratiom</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:20.416364" elapsed="0.000698"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-16T01:46:20.417639" level="INFO">Executing command 'sudo ovs-vsctl show'.</msg>
<msg time="2026-04-16T01:46:20.489168" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-16T01:46:20.489391" level="INFO">${output} = 9a5df812-eb49-4477-a37e-2d464c02791d
    Bridge s6
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s6-eth3
            Interface s6-eth3
        Port s6-eth2
   ...</msg>
<var>${output}</var>
<arg>sudo ovs-vsctl show</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-16T01:46:20.417428" elapsed="0.072023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:20.490499" level="INFO">9a5df812-eb49-4477-a37e-2d464c02791d
    Bridge s6
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s6-eth3
            Interface s6-eth3
        Port s6-eth2
            Interface s6-eth2
        Port s6
            Interface s6
                type: internal
        Port s6-eth1
            Interface s6-eth1
    Bridge s29
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s29-eth2
            Interface s29-eth2
        Port s29-eth1
            Interface s29-eth1
        Port s29-eth3
            Interface s29-eth3
        Port s29
            Interface s29
                type: internal
    Bridge s12
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s12-eth2
            Interface s12-eth2
        Port s12-eth1
            Interface s12-eth1
        Port s12
            Interface s12
                type: internal
        Port s12-eth3
            Interface s12-eth3
    Bridge s23
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s23-eth2
            Interface s23-eth2
        Port s23
            Interface s23
                type: internal
        Port s23-eth3
            Interface s23-eth3
        Port s23-eth1
            Interface s23-eth1
    Bridge s13
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s13-eth3
            Interface s13-eth3
        Port s13-eth1
            Interface s13-eth1
        Port s13
            Interface s13
                type: internal
        Port s13-eth2
            Interface s13-eth2
    Bridge s17
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s17-eth2
            Interface s17-eth2
        Port s17
            Interface s17
                type: internal
        Port s17-eth3
            Interface s17-eth3
        Port s17-eth1
            Interface s17-eth1
    Bridge s3
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s3
            Interface s3
                type: internal
        Port s3-eth3
            Interface s3-eth3
        Port s3-eth2
            Interface s3-eth2
        Port s3-eth1
            Interface s3-eth1
    Bridge s16
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s16-eth2
            Interface s16-eth2
        Port s16
            Interface s16
                type: internal
        Port s16-eth1
            Interface s16-eth1
        Port s16-eth3
            Interface s16-eth3
    Bridge s19
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s19
            Interface s19
                type: internal
        Port s19-eth2
            Interface s19-eth2
        Port s19-eth1
            Interface s19-eth1
        Port s19-eth3
            Interface s19-eth3
    Bridge s27
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s27
            Interface s27
                type: internal
        Port s27-eth2
            Interface s27-eth2
        Port s27-eth1
            Interface s27-eth1
        Port s27-eth3
            Interface s27-eth3
    Bridge s21
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s21
            Interface s21
                type: internal
        Port s21-eth1
            Interface s21-eth1
        Port s21-eth2
            Interface s21-eth2
        Port s21-eth3
            Interface s21-eth3
    Bridge s22
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s22-eth3
            Interface s22-eth3
        Port s22-eth2
            Interface s22-eth2
        Port s22-eth1
            Interface s22-eth1
        Port s22
            Interface s22
                type: internal
    Bridge s15
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s15-eth1
            Interface s15-eth1
        Port s15-eth2
            Interface s15-eth2
        Port s15-eth3
            Interface s15-eth3
        Port s15
            Interface s15
                type: internal
    Bridge s1
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s1-eth2
            Interface s1-eth2
        Port s1
            Interface s1
                type: internal
        Port s1-eth1
            Interface s1-eth1
    Bridge s24
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s24
            Interface s24
                type: internal
        Port s24-eth1
            Interface s24-eth1
        Port s24-eth3
            Interface s24-eth3
        Port s24-eth2
            Interface s24-eth2
    Bridge s26
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s26-eth3
            Interface s26-eth3
        Port s26-eth2
            Interface s26-eth2
        Port s26
            Interface s26
                type: internal
        Port s26-eth1
            Interface s26-eth1
    Bridge s8
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s8-eth1
            Interface s8-eth1
        Port s8-eth3
            Interface s8-eth3
        Port s8-eth2
            Interface s8-eth2
        Port s8
            Interface s8
                type: internal
    Bridge s7
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s7-eth1
            Interface s7-eth1
        Port s7-eth2
            Interface s7-eth2
        Port s7
            Interface s7
                type: internal
        Port s7-eth3
            Interface s7-eth3
    Bridge s30
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s30-eth3
            Interface s30-eth3
        Port s30-eth2
            Interface s30-eth2
        Port s30-eth1
            Interface s30-eth1
        Port s30
            Interface s30
                type: internal
    Bridge s2
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s2
            Interface s2
                type: internal
        Port s2-eth1
            Interface s2-eth1
        Port s2-eth2
            Interface s2-eth2
        Port s2-eth3
            Interface s2-eth3
    Bridge s4
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s4-eth2
            Interface s4-eth2
        Port s4-eth3
            Interface s4-eth3
        Port s4
            Interface s4
                type: internal
        Port s4-eth1
            Interface s4-eth1
    Bridge s14
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s14
            Interface s14
                type: internal
        Port s14-eth2
            Interface s14-eth2
        Port s14-eth1
            Interface s14-eth1
        Port s14-eth3
            Interface s14-eth3
    Bridge s25
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s25-eth3
            Interface s25-eth3
        Port s25-eth2
            Interface s25-eth2
        Port s25
            Interface s25
                type: internal
        Port s25-eth1
            Interface s25-eth1
    Bridge s11
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s11-eth1
            Interface s11-eth1
        Port s11-eth3
            Interface s11-eth3
        Port s11
            Interface s11
                type: internal
        Port s11-eth2
            Interface s11-eth2
    Bridge s28
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s28-eth1
            Interface s28-eth1
        Port s28
            Interface s28
                type: internal
        Port s28-eth2
            Interface s28-eth2
        Port s28-eth3
            Interface s28-eth3
    Bridge s31
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s31-eth2
            Interface s31-eth2
        Port s31
            Interface s31
                type: internal
        Port s31-eth1
            Interface s31-eth1
        Port s31-eth3
            Interface s31-eth3
    Bridge s9
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s9-eth2
            Interface s9-eth2
        Port s9-eth3
            Interface s9-eth3
        Port s9-eth1
            Interface s9-eth1
        Port s9
            Interface s9
                type: internal
    Bridge s32
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s32-eth1
            Interface s32-eth1
        Port s32
            Interface s32
                type: internal
        Port s32-eth2
            Interface s32-eth2
    Bridge s5
        Controller "ssl:10.30.170.129:6653"
        fail_mode: standalone
        Port s5-eth1
            Interface s5-eth1
        Port s5
            Interface s5
                type: internal
        Port s5-eth2
            Interface s5-eth2
        Port s5-eth3
            Interface s5-eth3
    Bridge s18
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s18-eth3
            Interface s18-eth3
        Port s18
            Interface s18
                type: internal
        Port s18-eth1
            Interface s18-eth1
        Port s18-eth2
            Interface s18-eth2
    Bridge s10
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s10-eth3
            Interface s10-eth3
        Port s10-eth1
            Interface s10-eth1
        Port s10
            Interface s10
                type: internal
        Port s10-eth2
            Interface s10-eth2
    Bridge s20
        Controller "ssl:10.30.170.129:6653"
            is_connected: true
        fail_mode: standalone
        Port s20
            Interface s20
                type: internal
        Port s20-eth3
            Interface s20-eth3
        Port s20-eth1
            Interface s20-eth1
        Port s20-eth2
            Interface s20-eth2
    ovs_version: "2.17.11"</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:20.489904" elapsed="0.000974"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:20.491230" elapsed="0.000542"/>
</kw>
<return>
<value>${mininet_conn_id}</value>
<status status="PASS" start="2026-04-16T01:46:20.491895" elapsed="0.000087"/>
</return>
<msg time="2026-04-16T01:46:20.492301" level="INFO">${mininet_conn_id} = 7</msg>
<var>${mininet_conn_id}</var>
<arg>options=--topo linear,${switch_count}</arg>
<arg>ofport=${ofport}</arg>
<arg>protocol=${protocol}</arg>
<doc>Start Mininet with custom topology and connect to list of controllers in ${controller_index_list} or all if no list is provided.</doc>
<status status="PASS" start="2026-04-16T01:46:06.481841" elapsed="14.010518"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:20.493554" level="INFO">${mininet_conn_id} = 7</msg>
<arg>${mininet_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:20.492802" elapsed="0.000846"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Switch Connections Running On Member" owner="ClusterOpenFlow">
<kw name="Get Switches Count" owner="ScaleClient">
<msg time="2026-04-16T01:46:21.599943" level="INFO">${count} = 32</msg>
<var>${count}</var>
<arg>controller=${ODL_SYSTEM_${member_index}_IP}</arg>
<doc>Gives the count of the switches presnt in the operational inventory nodes datastore.</doc>
<status status="PASS" start="2026-04-16T01:46:20.496317" elapsed="1.103680"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.600745" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${switch_count}</arg>
<arg>${count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-16T01:46:21.600305" elapsed="0.000514"/>
</kw>
<arg>${switch_count}</arg>
<arg>1</arg>
<doc>Check if number of Switch connections on member of given index is equal to 32.</doc>
<status status="PASS" start="2026-04-16T01:46:20.495482" elapsed="1.105407"/>
</kw>
<arg>${mininet_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Verify_Switch_Connections_Running_On_Member</arg>
<arg>${switch_count}</arg>
<arg>1</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:20.494066" elapsed="1.106877"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>Fail the entire suite if switches cannot connect</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-16T01:46:21.601154" elapsed="0.000219"/>
</kw>
<kw name="Run Keyword If Test Failed" owner="BuiltIn" type="TEARDOWN">
<arg>Fatal Error</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-04-16T01:46:21.601643" elapsed="0.000249"/>
</kw>
<doc>Start mininet, controller OF port 6653 should be enabled for TLS while port 6633 should be for TCP.</doc>
<status status="PASS" start="2026-04-16T01:46:06.475169" elapsed="15.126770"/>
</test>
<test id="s1-t3" name="Add Bulk Flow" line="71">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:21.603439" level="INFO">${config_datastore_write_start_time} = 2026-04-16 01:46:21.603</msg>
<var>${config_datastore_write_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:21.603164" elapsed="0.000317"/>
</kw>
<kw name="Add Bulk Flow In Node" owner="BulkomaticKeywords">
<kw name="Add Bulk Flow" owner="BulkomaticKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.614454" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.614149" elapsed="0.000333"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:21.614531" elapsed="0.000043"/>
</return>
<msg time="2026-04-16T01:46:21.614698" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:21.613799" elapsed="0.000942"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.628276" level="INFO">/rests/operations/sal-bulk-flow:flow-test</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.628025" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.628709" level="INFO">{
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.628473" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.629164" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.628922" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.629591" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.629354" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:21.630481" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-16T01:46:21.630254" elapsed="0.000253"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-16T01:46:21.630852" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-16T01:46:21.630661" elapsed="0.000216"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-16T01:46:21.631030" elapsed="0.000226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.631700" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.631448" elapsed="0.000314"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-16T01:46:21.631805" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:21.631961" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-16T01:46:21.629848" elapsed="0.002137"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:21.671168" level="INFO">POST Request : url=http://10.30.170.129:8181/rests/operations/sal-bulk-flow:flow-test 
 path_url=/rests/operations/sal-bulk-flow:flow-test 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '402', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
"input" :
  {
   "sal-bulk-flow:is-add" : "true",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
 
 </msg>
<msg time="2026-04-16T01:46:21.671294" level="INFO">POST Response : url=http://10.30.170.129:8181/rests/operations/sal-bulk-flow:flow-test 
 status=204, reason=No Content 
 headers={'Set-Cookie': 'JSESSIONID=node0em9427wm22nt7sigi3sbckgn1.node0; Path=/rests; HttpOnly, rememberMe=deleteMe; Path=/rests; Max-Age=0; Expires=Wed, 15-Apr-2026 01:46:21 GMT; SameSite=lax', 'Expires': 'Thu, 01 Jan 1970 00:00:00 GMT'} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:21.671543" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:21.634449" elapsed="0.037151"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.632138" elapsed="0.039563"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.672143" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.671796" elapsed="0.000495"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.632114" elapsed="0.040225"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.680061" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.674660" elapsed="0.005463"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.674173" elapsed="0.005997"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.674131" elapsed="0.006075"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.683906" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.680588" elapsed="0.003381"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.680283" elapsed="0.003733"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.680260" elapsed="0.003791"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.689058" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.684271" elapsed="0.004826"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.689525" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.689198" elapsed="0.000407"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.690299" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.689881" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.689638" elapsed="0.000746"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.689172" elapsed="0.001243"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.691182" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.690630" elapsed="0.000589"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.691702" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.691364" elapsed="0.000464"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.692327" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.692034" elapsed="0.000319"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.691859" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.691331" elapsed="0.001078"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:21.692560" elapsed="0.000359"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:21.693500" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.693082" elapsed="0.000445"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:21.693687" elapsed="0.002397"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:21.673156" elapsed="0.022991"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-16T01:46:21.696327" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:21.696222" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.696203" elapsed="0.000228"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-16T01:46:21.699002" level="INFO">${text_normalized} = </msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-16T01:46:21.696579" elapsed="0.002450"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-16T01:46:21.699078" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:21.699232" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:21.625306" elapsed="0.073966"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:21.699339" elapsed="0.000026"/>
</return>
<msg time="2026-04-16T01:46:21.699485" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-16T01:46:21.622681" elapsed="0.076828"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:21.699559" elapsed="0.000024"/>
</return>
<msg time="2026-04-16T01:46:21.699700" level="INFO">${resp} = </msg>
<var>${resp}</var>
<arg>${ADD_BULK_CONFIG_NODES_API}</arg>
<arg>${json_body_add}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:21.613310" elapsed="0.086430"/>
</kw>
<arg>${json_body_add}</arg>
<arg>${controller_index}</arg>
<doc>Add Bulk Flow in member 1 according to ${json_body_add}.</doc>
<status status="PASS" start="2026-04-16T01:46:21.608746" elapsed="0.091056"/>
</kw>
<kw name="Wait Until Write Finishes" owner="BulkomaticKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.706596" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.706299" elapsed="0.000324"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:21.706668" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:21.706833" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:21.705959" elapsed="0.000899"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.713649" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.713401" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.714117" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.713870" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:21.740477" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:21.740612" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:21 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:21 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303981,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:21.740857" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:21.716377" elapsed="0.024539"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.714227" elapsed="0.026785"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.741413" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.741073" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.714209" elapsed="0.027393"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.748773" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303981,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.743972" elapsed="0.004868"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.743438" elapsed="0.005450"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.743395" elapsed="0.005528"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.752593" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:21.749301" elapsed="0.003355"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.748999" elapsed="0.003704"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.748976" elapsed="0.003827"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.753558" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.753032" elapsed="0.000563"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.754038" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.753692" elapsed="0.000427"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.754817" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.754371" elapsed="0.000483"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.754152" elapsed="0.000752"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.753666" elapsed="0.001269"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.755748" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.755198" elapsed="0.000590"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.756205" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:21.755886" elapsed="0.000397"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.756966" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:21.756533" elapsed="0.000469"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:21.756316" elapsed="0.000735"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.755860" elapsed="0.001221"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:21.757287" elapsed="0.000505"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:21.758401" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.758022" elapsed="0.000416"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:21.758650" elapsed="0.002767"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:21.742399" elapsed="0.019083"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:21.761657" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-16T01:46:21.761552" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:21.761534" elapsed="0.000226"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:21.761908" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:21.761979" elapsed="0.000015"/>
</return>
<msg time="2026-04-16T01:46:21.764297" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303981,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:21.707189" elapsed="0.057136"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:21.764377" elapsed="0.000027"/>
</return>
<msg time="2026-04-16T01:46:21.764524" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303981,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:21.705504" elapsed="0.059047"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.765517" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303981, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:21.765120" elapsed="0.000425"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:21.765592" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:21.765761" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303981, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:21.764787" elapsed="0.001001"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:21.766142" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:21.765962" elapsed="0.000206"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.766638" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:21.766340" elapsed="0.000324"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.767179" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:21.766886" elapsed="0.000319"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:21.767761" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:21.767372" elapsed="0.000550">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:21.701004" elapsed="0.067182">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.779438" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:22.778895" elapsed="0.000589"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:22.779567" elapsed="0.000056"/>
</return>
<msg time="2026-04-16T01:46:22.779835" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:22.778236" elapsed="0.001636"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.788442" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:22.788174" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.788997" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:22.788648" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:22.795562" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:22.795634" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:22 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:22 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303982,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:22.795762" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:22.791240" elapsed="0.004550"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:22.789130" elapsed="0.006703"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:22.796015" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:22.795862" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.789106" elapsed="0.006995"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.799735" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303982,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:22.797136" elapsed="0.002661"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:22.796896" elapsed="0.002945"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.796877" elapsed="0.002997"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.802654" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:22.800185" elapsed="0.002516"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:22.799941" elapsed="0.002810"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.799923" elapsed="0.002854"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.803353" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:22.802950" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:22.803684" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:22.803449" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.804243" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:22.803942" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:22.803782" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.803431" elapsed="0.000894"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.804864" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:22.804480" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:22.805235" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:22.805001" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.805908" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:22.805544" elapsed="0.000402"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:22.805383" elapsed="0.000615"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.804978" elapsed="0.001050"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:22.806242" elapsed="0.000515"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:22.807402" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:22.806993" elapsed="0.000447"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:22.807657" elapsed="0.003381"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:22.796450" elapsed="0.014677"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:22.811376" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-16T01:46:22.811226" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:22.811200" elapsed="0.000297"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:22.811701" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:22.811823" elapsed="0.000021"/>
</return>
<msg time="2026-04-16T01:46:22.814824" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303982,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:22.780359" elapsed="0.034495"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:22.814907" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:22.815057" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303982,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:22.777514" elapsed="0.037570"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.816059" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303982, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:22.815636" elapsed="0.000451"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:22.816136" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:22.816289" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303982, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:22.815303" elapsed="0.001012"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:22.816672" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:22.816490" elapsed="0.000207"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.817212" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:22.816893" elapsed="0.000345"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.817668" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:22.817408" elapsed="0.000285"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:22.818240" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:22.817877" elapsed="0.000454">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:22.769189" elapsed="0.049258">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.830670" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:23.830304" elapsed="0.000399"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:23.830780" elapsed="0.000041"/>
</return>
<msg time="2026-04-16T01:46:23.830966" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:23.829946" elapsed="0.001046"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.837737" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:23.837466" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.838185" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:23.837940" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:23.844821" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:23.844885" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:23 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:23 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303983,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:23.844990" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:23.840433" elapsed="0.004583"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:23.838304" elapsed="0.006756"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:23.845242" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:23.845088" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.838284" elapsed="0.007044"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.848786" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303983,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:23.846339" elapsed="0.002496"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:23.846119" elapsed="0.002751"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.846101" elapsed="0.002795"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.851555" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:23.849172" elapsed="0.002429"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:23.848952" elapsed="0.002684"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.848935" elapsed="0.002728"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.852430" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:23.851881" elapsed="0.000587"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:23.852911" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:23.852566" elapsed="0.000428"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.853672" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:23.853250" elapsed="0.000459"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:23.853028" elapsed="0.000752"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.852540" elapsed="0.001270"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.854540" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:23.854027" elapsed="0.000550"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:23.855045" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:23.854675" elapsed="0.000451"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.855812" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:23.855377" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:23.855159" elapsed="0.000740"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.854650" elapsed="0.001279"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:23.856140" elapsed="0.000481"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:23.857273" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:23.856872" elapsed="0.000439"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:23.857525" elapsed="0.026100"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:23.845676" elapsed="0.038055"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:23.884019" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-04-16T01:46:23.883895" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:23.883866" elapsed="0.000253"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:23.884294" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:23.884368" elapsed="0.000015"/>
</return>
<msg time="2026-04-16T01:46:23.886723" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303983,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:23.831397" elapsed="0.055358"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:23.886841" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:23.886996" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303983,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:23.829461" elapsed="0.057561"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.888210" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303983, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:23.887765" elapsed="0.000473"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:23.888288" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:23.888440" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303983, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:23.887393" elapsed="0.001073"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:23.888844" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:23.888640" elapsed="0.000230"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.889346" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:23.889043" elapsed="0.000329"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.889816" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:23.889539" elapsed="0.000303"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:23.890360" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:23.890007" elapsed="0.000432">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:23.819426" elapsed="0.071123">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.903873" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:24.903459" elapsed="0.000449"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:24.903974" elapsed="0.000054"/>
</return>
<msg time="2026-04-16T01:46:24.904183" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:24.903015" elapsed="0.001193"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.911575" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:24.911308" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.912111" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:24.911820" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:24.919290" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:24.919355" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:24 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:24 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303984,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:24.919451" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:24.914564" elapsed="0.004914"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:24.912243" elapsed="0.007342"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:24.919823" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:24.919621" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.912221" elapsed="0.007708"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.923620" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303984,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:24.921053" elapsed="0.002618"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:24.920798" elapsed="0.002929"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.920778" elapsed="0.002982"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.927509" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:24.924106" elapsed="0.003472"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:24.923828" elapsed="0.003802"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.923810" elapsed="0.003855"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.928678" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:24.927919" elapsed="0.000828"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:24.929375" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:24.928880" elapsed="0.000582"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.930365" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:24.929738" elapsed="0.000667"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:24.929496" elapsed="0.000960"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.928845" elapsed="0.001641"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.931580" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:24.930705" elapsed="0.001004"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:24.932166" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:24.931837" elapsed="0.000458"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.933225" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:24.932557" elapsed="0.000706"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:24.932332" elapsed="0.001028"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.931810" elapsed="0.001583"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:24.933759" elapsed="0.000413"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:24.934839" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:24.934338" elapsed="0.000529"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:24.935025" elapsed="0.002833"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:24.920298" elapsed="0.017742"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:24.938233" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-04-16T01:46:24.938120" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:24.938100" elapsed="0.000224"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:24.938475" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:24.938547" elapsed="0.000016"/>
</return>
<msg time="2026-04-16T01:46:24.941518" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303984,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:24.904570" elapsed="0.036979"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:24.941602" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:24.941771" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303984,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:24.902501" elapsed="0.039297"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.943012" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303984, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:24.942589" elapsed="0.000452"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:24.943090" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:24.943310" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303984, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:24.942134" elapsed="0.001206"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:24.943766" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:24.943515" elapsed="0.000280"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.944531" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:24.943971" elapsed="0.000591"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.945309" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:24.944863" elapsed="0.000472"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:24.946152" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:24.945508" elapsed="0.000731">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:24.891572" elapsed="0.054783">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.955943" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:25.955048" elapsed="0.000936"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:25.956050" elapsed="0.000040"/>
</return>
<msg time="2026-04-16T01:46:25.956219" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:25.954042" elapsed="0.002204"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.963190" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:25.962907" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.963640" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:25.963394" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:25.969746" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:25.969808" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:25 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:25 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303985,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:25.969903" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:25.965871" elapsed="0.004059"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:25.963777" elapsed="0.006198"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:25.970159" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:25.970004" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.963755" elapsed="0.006491"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.973702" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303985,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:25.971285" elapsed="0.002480"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:25.971063" elapsed="0.002738"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.971045" elapsed="0.002782"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.976512" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:25.974107" elapsed="0.002452"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:25.973883" elapsed="0.002712"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.973866" elapsed="0.002754"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.977283" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:25.976804" elapsed="0.000508"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:25.977623" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:25.977384" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.978189" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:25.977886" elapsed="0.000330"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:25.977706" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.977365" elapsed="0.000909"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.978812" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:25.978430" elapsed="0.000409"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:25.979219" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:25.978910" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.979782" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:25.979462" elapsed="0.000347"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:25.979304" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.978892" elapsed="0.000974"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:25.980022" elapsed="0.000348"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:25.980857" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:25.980535" elapsed="0.000349"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:25.981039" elapsed="0.002391"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:25.970599" elapsed="0.012897"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:25.983682" elapsed="0.000049"/>
</return>
<status status="PASS" start="2026-04-16T01:46:25.983571" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:25.983552" elapsed="0.000241"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:25.983943" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:25.984014" elapsed="0.000015"/>
</return>
<msg time="2026-04-16T01:46:25.986369" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303985,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:25.956593" elapsed="0.029806"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:25.986452" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:25.986605" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776303985,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:25.952953" elapsed="0.033678"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.987651" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303985, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:25.987249" elapsed="0.000431"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:25.987745" elapsed="0.000030"/>
</return>
<msg time="2026-04-16T01:46:25.987934" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776303985, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:25.986872" elapsed="0.001099"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:25.988464" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:25.988212" elapsed="0.000288"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.989177" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:25.988760" elapsed="0.000454"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.989888" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:25.989449" elapsed="0.000476"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:25.990654" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:25.990163" elapsed="0.000626">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:25.946959" elapsed="0.044002">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.003753" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:27.003346" elapsed="0.000443"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:27.003855" elapsed="0.000046"/>
</return>
<msg time="2026-04-16T01:46:27.004034" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:27.002978" elapsed="0.001081"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.010805" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:27.010527" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.011252" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:27.011008" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:27.017578" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:27.017641" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:27 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:27 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776303987,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:27.017760" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:27.013540" elapsed="0.004247"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.011375" elapsed="0.006455"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:27.018023" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:27.017861" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.011352" elapsed="0.006760"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.021705" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776303987,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:27.019121" elapsed="0.002650"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.018899" elapsed="0.002908"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.018880" elapsed="0.002953"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.024553" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:27.022111" elapsed="0.002490"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.021889" elapsed="0.002748"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.021872" elapsed="0.002790"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.025335" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:27.024855" elapsed="0.000509"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:27.025674" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:27.025438" elapsed="0.000316"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.026255" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:27.025947" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.025781" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.025418" elapsed="0.000922"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.026878" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:27.026496" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:27.027206" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:27.026977" elapsed="0.000346"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.027827" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:27.027510" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.027350" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.026958" elapsed="0.000954"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:27.028067" elapsed="0.000358"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:27.028907" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:27.028591" elapsed="0.000343"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:27.029089" elapsed="0.002432"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:27.018459" elapsed="0.013126"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:27.031781" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-04-16T01:46:27.031657" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.031638" elapsed="0.000235"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:27.032021" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:27.032093" elapsed="0.000015"/>
</return>
<msg time="2026-04-16T01:46:27.034433" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776303987,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:27.004413" elapsed="0.030049"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:27.034515" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:27.034666" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776303987,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:27.002476" elapsed="0.032216"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.035668" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 2, 'timestamp': 1776303987, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:27.035266" elapsed="0.000431"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:27.035762" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:27.035923" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 2, 'timestamp': 1776303987, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:27.034929" elapsed="0.001021"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:27.036309" level="INFO">${value} = 2</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:27.036126" elapsed="0.000210"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.036827" level="INFO">${value} = 2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:27.036507" elapsed="0.000346"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.037311" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:27.037021" elapsed="0.000316"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="PASS" start="2026-04-16T01:46:27.037505" elapsed="0.000332"/>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="PASS" start="2026-04-16T01:46:26.991961" elapsed="0.045938"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>BulkomaticKeywords.Operation Status Check</arg>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:21.700402" elapsed="5.337551"/>
</kw>
<arg>${controller_index}</arg>
<arg>${timeout}</arg>
<doc>Wait Until Write operation status is OK in member 1.</doc>
<status status="PASS" start="2026-04-16T01:46:21.700014" elapsed="5.338001"/>
</kw>
<arg>${temp_json_config_add}</arg>
<arg>1</arg>
<arg>${operation_timeout}</arg>
<doc>Add Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="PASS" start="2026-04-16T01:46:21.608252" elapsed="5.429817"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:27.038658" level="INFO">${config_datastore_write_end_time} = 2026-04-16 01:46:27.039</msg>
<var>${config_datastore_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:27.038231" elapsed="0.000453"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-16T01:46:27.041444" level="INFO">${config_datastore_write_time} = 5.436</msg>
<var>${config_datastore_write_time}</var>
<arg>${config_datastore_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-16T01:46:27.038854" elapsed="0.002656"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.042084" level="INFO">${config_datastore_write_rate} = 18395.87932303164</msg>
<var>${config_datastore_write_rate}</var>
<arg>${flow_count_after_add} / ${config_datastore_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:27.041678" elapsed="0.000433"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.042776" level="INFO">${config_datastore_write_start_time} = 2026-04-16 01:46:21.603</msg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:27.042279" elapsed="0.000542"/>
</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-04-16T01:46:27.042976" elapsed="0.000381"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_write_time is ${config_datastore_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:27.043519" elapsed="0.000344"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_write_rate is ${config_datastore_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:27.044022" elapsed="0.000321"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.044847" level="INFO">${config_datastore_write_time} = 5.436</msg>
<arg>${config_datastore_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:27.044510" elapsed="0.000380"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.045388" level="INFO">${config_datastore_write_rate} = 18395.87932303164</msg>
<arg>${config_datastore_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:27.045049" elapsed="0.000381"/>
</kw>
<doc>100K Flows (1K Flows per DPN) in 100 DPN added and verify it gets applied.</doc>
<status status="PASS" start="2026-04-16T01:46:21.602474" elapsed="5.443067"/>
</test>
<test id="s1-t4" name="Verify Flows In Switch" line="87">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:27.046463" level="INFO">${Mininet_write_start_time} = 2026-04-16 01:46:27.046</msg>
<var>${Mininet_write_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:27.046236" elapsed="0.000253"/>
</kw>
<kw name="Verify Aggregate Flow From Mininet Session" owner="MininetKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Flows In Mininet" owner="MininetKeywords">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${mininet_conn}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${mininet_conn}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-16T01:46:27.048366" elapsed="0.000143"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.048141" elapsed="0.000403"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.048121" elapsed="0.000449"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:27.049009" level="INFO">${cmd} = dpctl dump-aggregate -O OpenFlow13</msg>
<var>${cmd}</var>
<arg>dpctl dump-aggregate -O OpenFlow13</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:27.048747" elapsed="0.000288"/>
</kw>
<kw name="Send Mininet Command" owner="MininetKeywords">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${mininet_conn}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${mininet_conn}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-16T01:46:27.049897" elapsed="0.000135"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:27.049666" elapsed="0.000402"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:27.049648" elapsed="0.000444"/>
</if>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-16T01:46:27.052843" level="INFO">dpctl dump-aggregate -O OpenFlow13</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-16T01:46:27.050229" elapsed="0.002670"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-04-16T01:46:28.088036" level="INFO">*** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s3 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s4 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s5 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s6 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s7 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s8 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s9 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s10 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s11 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s12 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s13 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s14 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s15 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=1786
*** s16 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s17 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s18 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s19 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s20 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=2773
*** s21 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=2344
*** s22 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s23 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=1366
*** s24 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=52
*** s25 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s26 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s27 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s28 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s29 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s30 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s31 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
*** s32 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=0
mininet&gt;</msg>
<msg time="2026-04-16T01:46:28.088637" level="INFO">${output} = *** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 -------------------------...</msg>
<var>${output}</var>
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-04-16T01:46:27.053054" elapsed="1.035629"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-16T01:46:28.088804" elapsed="0.000072"/>
</return>
<msg time="2026-04-16T01:46:28.089236" level="INFO">${output} = *** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 -------------------------...</msg>
<var>${output}</var>
<arg>${mininet_conn}</arg>
<arg>${cmd}</arg>
<doc>Sends Command dpctl dump-aggregate -O OpenFlow13 to Mininet session 7 and returns read buffer response.</doc>
<status status="PASS" start="2026-04-16T01:46:27.049371" elapsed="1.039908"/>
</kw>
<kw name="Get Regexp Matches" owner="String">
<msg time="2026-04-16T01:46:28.090504" level="INFO">${flows} = ['3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '1786', '0', '3125', '3125', '3125', '2773', '2344', '0', '1366', '52', '0', '0', '0', ...</msg>
<var>${flows}</var>
<arg>${output}</arg>
<arg>(?&lt;=flow_count\=).*?(?=\r)</arg>
<doc>Returns a list of all non-overlapping matches in the given string.</doc>
<status status="PASS" start="2026-04-16T01:46:28.089648" elapsed="0.000897"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:28.092048" level="INFO">${total_flows} = 61446</msg>
<var>${total_flows}</var>
<arg>sum(map(int, ${flows}))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:28.090926" elapsed="0.001163"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-16T01:46:28.093096" level="FAIL">61446.0 != 100000.0</msg>
<arg>${total_flows}</arg>
<arg>${flow_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-16T01:46:28.092385" elapsed="0.000830">61446.0 != 100000.0</status>
</kw>
<arg>${mininet_conn}</arg>
<arg>${flow_count}</arg>
<doc>Sync with mininet to match exact number of flows</doc>
<status status="FAIL" start="2026-04-16T01:46:27.047831" elapsed="1.045544">61446.0 != 100000.0</status>
</kw>
<kw name="Check Flows In Mininet" owner="MininetKeywords">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${mininet_conn}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${mininet_conn}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-16T01:46:30.096151" elapsed="0.000470"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:30.095453" elapsed="0.001324"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:30.095384" elapsed="0.001473"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:30.098074" level="INFO">${cmd} = dpctl dump-aggregate -O OpenFlow13</msg>
<var>${cmd}</var>
<arg>dpctl dump-aggregate -O OpenFlow13</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:30.097356" elapsed="0.000783"/>
</kw>
<kw name="Send Mininet Command" owner="MininetKeywords">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${mininet_conn}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${mininet_conn}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-16T01:46:30.100838" elapsed="0.000371"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:30.100229" elapsed="0.001064"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:30.100171" elapsed="0.001179"/>
</if>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-16T01:46:30.104606" level="INFO">dpctl dump-aggregate -O OpenFlow13</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-16T01:46:30.101688" elapsed="0.002976"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-04-16T01:46:31.033621" level="INFO">*** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s3 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s4 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s5 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s6 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s7 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s8 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s9 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s10 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s11 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s12 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s13 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s14 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s15 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s16 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s17 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s18 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s19 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s20 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s21 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s22 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s23 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s24 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s25 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s26 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s27 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s28 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s29 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s30 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s31 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s32 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
mininet&gt;</msg>
<msg time="2026-04-16T01:46:31.034123" level="INFO">${output} = *** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 -------------------------...</msg>
<var>${output}</var>
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-04-16T01:46:30.104852" elapsed="0.929309"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-16T01:46:31.034251" elapsed="0.000073"/>
</return>
<msg time="2026-04-16T01:46:31.034511" level="INFO">${output} = *** s1 ------------------------------------------------------------------------
OFPST_AGGREGATE reply (OF1.3) (xid=0x2): packet_count=0 byte_count=0 flow_count=3125
*** s2 -------------------------...</msg>
<var>${output}</var>
<arg>${mininet_conn}</arg>
<arg>${cmd}</arg>
<doc>Sends Command dpctl dump-aggregate -O OpenFlow13 to Mininet session 7 and returns read buffer response.</doc>
<status status="PASS" start="2026-04-16T01:46:30.098948" elapsed="0.935592"/>
</kw>
<kw name="Get Regexp Matches" owner="String">
<msg time="2026-04-16T01:46:31.035218" level="INFO">${flows} = ['3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125', '3125',...</msg>
<var>${flows}</var>
<arg>${output}</arg>
<arg>(?&lt;=flow_count\=).*?(?=\r)</arg>
<doc>Returns a list of all non-overlapping matches in the given string.</doc>
<status status="PASS" start="2026-04-16T01:46:31.034796" elapsed="0.000450"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:31.035970" level="INFO">${total_flows} = 100000</msg>
<var>${total_flows}</var>
<arg>sum(map(int, ${flows}))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:31.035420" elapsed="0.000580"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${total_flows}</arg>
<arg>${flow_count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-16T01:46:31.036212" elapsed="0.000330"/>
</kw>
<arg>${mininet_conn}</arg>
<arg>${flow_count}</arg>
<doc>Sync with mininet to match exact number of flows</doc>
<status status="PASS" start="2026-04-16T01:46:30.094520" elapsed="0.942084"/>
</kw>
<arg>${time_out}</arg>
<arg>2s</arg>
<arg>MininetKeywords.Check Flows In Mininet</arg>
<arg>${mininet_conn}</arg>
<arg>${flow_count}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:27.047197" elapsed="3.989458"/>
</kw>
<arg>${mininet_conn_id}</arg>
<arg>${flow_count_after_add}</arg>
<arg>${operation_timeout}</arg>
<doc>Verify flow count per switch</doc>
<status status="PASS" start="2026-04-16T01:46:27.046695" elapsed="3.990040"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:31.037151" level="INFO">${Mininet_write_end_time} = 2026-04-16 01:46:31.037</msg>
<var>${Mininet_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:31.036902" elapsed="0.000275"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-16T01:46:31.037684" level="INFO">${Mininet_write_time} = 9.434</msg>
<var>${Mininet_write_time}</var>
<arg>${Mininet_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-16T01:46:31.037335" elapsed="0.000375"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:31.038264" level="INFO">${Mininet_write_rate} = 10599.9576001696</msg>
<var>${Mininet_write_rate}</var>
<arg>${flow_count_after_add} / ${Mininet_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:31.037886" elapsed="0.000405"/>
</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-04-16T01:46:31.038446" elapsed="0.000495"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The Mininet_write_time is ${Mininet_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:31.039136" elapsed="0.000291"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The Mininet_write_rate is ${Mininet_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:31.039582" elapsed="0.000295"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:31.040369" level="INFO">${Mininet_write_time} = 9.434</msg>
<arg>${Mininet_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:31.040045" elapsed="0.000366"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:31.040895" level="INFO">${Mininet_write_rate} = 10599.9576001696</msg>
<arg>${Mininet_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:31.040569" elapsed="0.000368"/>
</kw>
<doc>Verify 100K flows are installed in 100 switches.</doc>
<status status="PASS" start="2026-04-16T01:46:27.045806" elapsed="3.995256"/>
</test>
<test id="s1-t5" name="Verify Flows In Oper DS" line="105">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check Flows Operational Datastore On Member" owner="ClusterOpenFlow">
<kw name="Flow Stats Collected" owner="ScaleClient">
<msg time="2026-04-16T01:46:35.116148" level="INFO">('Switches,ActiveFlows(reported)/FlowsFound', 32, 100000, 100000)</msg>
<msg time="2026-04-16T01:46:35.116372" level="INFO">${sw} = 32</msg>
<msg time="2026-04-16T01:46:35.116426" level="INFO">${reported_flow} = 100000</msg>
<msg time="2026-04-16T01:46:35.116472" level="INFO">${found_flow} = 100000</msg>
<var>${sw}</var>
<var>${reported_flow}</var>
<var>${found_flow}</var>
<arg>controller=${ODL_SYSTEM_${member_index}_IP}</arg>
<doc>Provides the operational inventory counts counts of switches and flows.</doc>
<status status="PASS" start="2026-04-16T01:46:31.046768" elapsed="4.069731"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<arg>${flow_count}</arg>
<arg>${found_flow}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-16T01:46:35.116797" elapsed="0.000477"/>
</kw>
<arg>${flow_count_after_add}</arg>
<arg>1</arg>
<doc>Check if number of Operational Flows on member of given index is equal to ${flow_count}.</doc>
<status status="PASS" start="2026-04-16T01:46:31.046386" elapsed="4.071117"/>
</kw>
<arg>${oper_ds_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Check_Flows_Operational_Datastore_On_Member</arg>
<arg>${flow_count_after_add}</arg>
<arg>1</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:31.041707" elapsed="4.075853"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:35.118036" level="INFO">${oper_datastore_write_end_time} = 2026-04-16 01:46:35.118</msg>
<var>${oper_datastore_write_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:35.117773" elapsed="0.000292"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-16T01:46:35.118615" level="INFO">${oper_datastore_write_time} = 13.515</msg>
<var>${oper_datastore_write_time}</var>
<arg>${oper_datastore_write_end_time}</arg>
<arg>${config_datastore_write_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-16T01:46:35.118238" elapsed="0.000405"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:35.119328" level="INFO">${oper_datastore_write_rate} = 7399.186089530152</msg>
<var>${oper_datastore_write_rate}</var>
<arg>${flow_count_after_add} / ${oper_datastore_write_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:35.118903" elapsed="0.000459"/>
</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-04-16T01:46:35.119530" elapsed="0.000330"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The operational_datastore_write_time is ${oper_datastore_write_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:35.120020" elapsed="0.000302"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The operational_datastore_write_rate is ${oper_datastore_write_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:35.120479" elapsed="0.000337"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:35.121330" level="INFO">${oper_datastore_write_time} = 13.515</msg>
<arg>${oper_datastore_write_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:35.120991" elapsed="0.000382"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:35.121994" level="INFO">${oper_datastore_write_rate} = 7399.186089530152</msg>
<arg>${oper_datastore_write_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:35.121536" elapsed="0.000502"/>
</kw>
<doc>Check Flows in Operational Datastore</doc>
<status status="PASS" start="2026-04-16T01:46:31.041273" elapsed="4.080880"/>
</test>
<test id="s1-t6" name="Stop Mininet And Verify" line="124">
<kw name="Stop Mininet And Exit" owner="MininetKeywords">
<if>
<branch type="IF" condition="&quot;&quot;&quot;${mininet_conn}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${mininet_conn}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-04-16T01:46:35.127924" elapsed="0.000146"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:35.127671" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:35.127647" elapsed="0.000488"/>
</if>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-16T01:46:35.130609" level="INFO">exit</msg>
<arg>exit</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-04-16T01:46:35.128274" elapsed="0.002501"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-04-16T01:46:37.784154" level="INFO">*** Stopping 0 controllers

*** Stopping 63 links
...............................................................
*** Stopping 32 switches
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 
*** Stopping 32 hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 
*** Done
completed in 28.309 seconds
[?2004h[jenkins@releng-19040-691-1-mininet-ovs-217-0 ~]&gt;</msg>
<arg>${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-04-16T01:46:35.131137" elapsed="2.653255"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-16T01:46:37.784747" elapsed="0.000504"/>
</kw>
<arg>${mininet_conn_id}</arg>
<doc>Stops Mininet and exits session ${mininet_conn}</doc>
<status status="PASS" start="2026-04-16T01:46:35.127376" elapsed="2.657950"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify Switch Connections Running On Member" owner="ClusterOpenFlow">
<kw name="Get Switches Count" owner="ScaleClient">
<msg time="2026-04-16T01:46:39.551027" level="INFO">${count} = 17</msg>
<var>${count}</var>
<arg>controller=${ODL_SYSTEM_${member_index}_IP}</arg>
<doc>Gives the count of the switches presnt in the operational inventory nodes datastore.</doc>
<status status="PASS" start="2026-04-16T01:46:37.786779" elapsed="1.764302"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-16T01:46:39.551765" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<msg time="2026-04-16T01:46:39.551887" level="FAIL">0.0 != 17.0</msg>
<arg>${switch_count}</arg>
<arg>${count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="FAIL" start="2026-04-16T01:46:39.551339" elapsed="0.000636">0.0 != 17.0</status>
</kw>
<arg>0</arg>
<arg>1</arg>
<doc>Check if number of Switch connections on member of given index is equal to 32.</doc>
<status status="FAIL" start="2026-04-16T01:46:37.786380" elapsed="1.765715">0.0 != 17.0</status>
</kw>
<kw name="Verify Switch Connections Running On Member" owner="ClusterOpenFlow">
<kw name="Get Switches Count" owner="ScaleClient">
<msg time="2026-04-16T01:46:41.577114" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>controller=${ODL_SYSTEM_${member_index}_IP}</arg>
<doc>Gives the count of the switches presnt in the operational inventory nodes datastore.</doc>
<status status="PASS" start="2026-04-16T01:46:41.554093" elapsed="0.023090"/>
</kw>
<kw name="Should Be Equal As Numbers" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.578422" level="INFO">Argument types are:
&lt;class 'str'&gt;
&lt;class 'int'&gt;</msg>
<arg>${switch_count}</arg>
<arg>${count}</arg>
<doc>Fails if objects are unequal after converting them to real numbers.</doc>
<status status="PASS" start="2026-04-16T01:46:41.577658" elapsed="0.000898"/>
</kw>
<arg>0</arg>
<arg>1</arg>
<doc>Check if number of Switch connections on member of given index is equal to 32.</doc>
<status status="PASS" start="2026-04-16T01:46:41.553227" elapsed="0.025780"/>
</kw>
<arg>${mininet_timeout}</arg>
<arg>2s</arg>
<arg>ClusterOpenFlow.Verify_Switch_Connections_Running_On_Member</arg>
<arg>0</arg>
<arg>1</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:37.785517" elapsed="3.793616"/>
</kw>
<doc>Stop mininet and exit connection.</doc>
<status status="PASS" start="2026-04-16T01:46:35.122422" elapsed="6.456974"/>
</test>
<test id="s1-t7" name="Delete All Flows" line="134">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:41.582888" level="INFO">${config_datastore_delete_start_time} = 2026-04-16 01:46:41.582</msg>
<var>${config_datastore_delete_start_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:41.582151" elapsed="0.000859"/>
</kw>
<kw name="Delete Bulk Flow In Node" owner="BulkomaticKeywords">
<kw name="Delete Bulk Flow" owner="BulkomaticKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.597378" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.597075" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:41.597456" elapsed="0.000045"/>
</return>
<msg time="2026-04-16T01:46:41.597625" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:41.596726" elapsed="0.000923"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.611908" level="INFO">/rests/operations/sal-bulk-flow:flow-test</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.611637" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.612345" level="INFO">{
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.612107" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.612800" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.612540" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.613233" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.612995" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:41.614097" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-16T01:46:41.613899" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-16T01:46:41.614450" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-16T01:46:41.614278" elapsed="0.000198"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-16T01:46:41.614625" elapsed="0.000225"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.615270" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.615024" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-16T01:46:41.615358" elapsed="0.000029"/>
</return>
<msg time="2026-04-16T01:46:41.615512" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-16T01:46:41.613473" elapsed="0.002064"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:41.655488" level="INFO">POST Request : url=http://10.30.170.129:8181/rests/operations/sal-bulk-flow:flow-test 
 path_url=/rests/operations/sal-bulk-flow:flow-test 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Cookie': 'JSESSIONID=node0em9427wm22nt7sigi3sbckgn1.node0', 'Content-Length': '403', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
"input" :
  {
   "sal-bulk-flow:is-add" : "false",
   "sal-bulk-flow:dpn-count" : "32",
   "sal-bulk-flow:flows-per-dpn" : "3125",
   "sal-bulk-flow:batch-size" : "3125",
   "sal-bulk-flow:seq" : "true",
   "sal-bulk-flow:tx-chain" : "true",
   "sal-bulk-flow:sleep-for" : "0",
   "sal-bulk-flow:sleep-after" : "1",
   "sal-bulk-flow:start-table-id" : "0",
   "sal-bulk-flow:end-table-id" : "1"
  }
}
 
 </msg>
<msg time="2026-04-16T01:46:41.655629" level="INFO">POST Response : url=http://10.30.170.129:8181/rests/operations/sal-bulk-flow:flow-test 
 status=204, reason=No Content 
 headers={} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:41.655944" level="INFO">${response} = &lt;Response [204]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:41.617837" elapsed="0.038170"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.615618" elapsed="0.040506"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.656594" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.656197" elapsed="0.000579"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.615597" elapsed="0.041229"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.665497" level="INFO"/>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.659305" elapsed="0.006293"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.658746" elapsed="0.006935"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.658675" elapsed="0.007092"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.672057" level="INFO">204</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.666397" elapsed="0.005828"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.665896" elapsed="0.006418"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.665858" elapsed="0.006515"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.673674" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.672790" elapsed="0.000983"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.674531" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.673935" elapsed="0.000733"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.675794" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.675417" elapsed="0.000406"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.675140" elapsed="0.000721"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.673893" elapsed="0.001989"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.676485" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.676041" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.676842" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.676587" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.677399" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.677087" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.676928" elapsed="0.000535"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.676568" elapsed="0.000916"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:41.677640" elapsed="0.000381"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:41.678487" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.678189" elapsed="0.000327"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:41.678670" elapsed="0.002544"/>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:41.657647" elapsed="0.023634"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-16T01:46:41.681465" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-16T01:46:41.681354" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.681336" elapsed="0.000200"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<msg time="2026-04-16T01:46:41.684243" level="INFO">${text_normalized} = </msg>
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="PASS" start="2026-04-16T01:46:41.681680" elapsed="0.002591"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="PASS" start="2026-04-16T01:46:41.684321" elapsed="0.000036"/>
</return>
<msg time="2026-04-16T01:46:41.684510" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:41.608901" elapsed="0.075636"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:41.684606" elapsed="0.000027"/>
</return>
<msg time="2026-04-16T01:46:41.684776" level="INFO">${response_text} = </msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="PASS" start="2026-04-16T01:46:41.605959" elapsed="0.078843"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:41.684854" elapsed="0.000026"/>
</return>
<msg time="2026-04-16T01:46:41.685002" level="INFO">${resp} = </msg>
<var>${resp}</var>
<arg>${ADD_BULK_CONFIG_NODES_API}</arg>
<arg>${json_body_del}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:41.596276" elapsed="0.088750"/>
</kw>
<arg>${json_body_del}</arg>
<arg>${controller_index}</arg>
<doc>Delete Bulk Flow in member 1 according to ${json_body_del}.</doc>
<status status="PASS" start="2026-04-16T01:46:41.590232" elapsed="0.094857"/>
</kw>
<kw name="Wait Until Write Finishes" owner="BulkomaticKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.692051" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.691749" elapsed="0.000329"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:41.692124" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:41.692270" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:41.691386" elapsed="0.000909"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.699369" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.699108" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.699838" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.699571" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:41.706803" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:41.706900" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:41 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:41 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776304001,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:41.706996" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:41.702042" elapsed="0.004980"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.699951" elapsed="0.007114"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.707245" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.707092" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.699931" elapsed="0.007399"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.710789" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776304001,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.708341" elapsed="0.002497"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.708115" elapsed="0.002760"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.708096" elapsed="0.002803"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.713587" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:41.711174" elapsed="0.002459"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.710955" elapsed="0.002713"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.710938" elapsed="0.002755"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.714235" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.713865" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.714563" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.714333" elapsed="0.000287"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.715140" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.714840" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.714643" elapsed="0.000560"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.714314" elapsed="0.000910"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.715757" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.715384" elapsed="0.000400"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.716083" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:41.715854" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.716614" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:41.716323" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:41.716162" elapsed="0.000657"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.715836" elapsed="0.001010"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:41.716999" elapsed="0.000346"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:41.717800" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.717510" elapsed="0.000317"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:41.717979" elapsed="0.002445"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:41.707677" elapsed="0.012809"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:41.720663" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-04-16T01:46:41.720556" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:41.720538" elapsed="0.000226"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:41.720911" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:41.720980" elapsed="0.000015"/>
</return>
<msg time="2026-04-16T01:46:41.723362" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776304001,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:41.692633" elapsed="0.030790"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:41.723478" elapsed="0.000028"/>
</return>
<msg time="2026-04-16T01:46:41.723631" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":1,"timestamp":1776304001,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:41.690930" elapsed="0.032727"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.724623" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776304001, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:41.724226" elapsed="0.000426"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:41.724701" elapsed="0.000043"/>
</return>
<msg time="2026-04-16T01:46:41.724872" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 1, 'timestamp': 1776304001, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:41.723891" elapsed="0.001007"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:41.725251" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:41.725071" elapsed="0.000206"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.725819" level="INFO">${value} = 1</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:41.725484" elapsed="0.000362"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.726273" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:41.726015" elapsed="0.000284"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<msg time="2026-04-16T01:46:41.726858" level="FAIL">'1' does not start with '2'</msg>
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="FAIL" start="2026-04-16T01:46:41.726465" elapsed="0.000487">'1' does not start with '2'</status>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="FAIL" start="2026-04-16T01:46:41.686313" elapsed="0.040758">'1' does not start with '2'</status>
</kw>
<kw name="Operation Status Check" owner="BulkomaticKeywords">
<kw name="Get_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.740100" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:42.739705" elapsed="0.000428"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-16T01:46:42.740196" elapsed="0.000043"/>
</return>
<msg time="2026-04-16T01:46:42.740369" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-16T01:46:42.739342" elapsed="0.001053"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.747297" level="INFO">/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:42.747031" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.747763" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:42.747500" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-04-16T01:46:42.755120" level="INFO">GET Request : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 path_url=/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-04-16T01:46:42.755181" level="INFO">GET Response : url=http://10.30.170.129:8181/jolokia/read/org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter/WriteOpStatus 
 status=200, reason=OK 
 headers={'Content-Type': 'text/plain;charset=utf-8', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Date': 'Thu, 16 Apr 2026 01:46:42 GMT', 'Expires': 'Thu, 16 Apr 2026 00:46:42 GMT', 'Transfer-Encoding': 'chunked'} 
 body={"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776304002,"status":200} 
 </msg>
<msg time="2026-04-16T01:46:42.755277" level="INFO">${response} = &lt;Response [200]&gt;</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="PASS" start="2026-04-16T01:46:42.750093" elapsed="0.005213"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:42.747900" elapsed="0.007450"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:42.755532" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:42.755378" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.747863" elapsed="0.007756"/>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.759279" level="INFO">{"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776304002,"status":200}</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:42.756638" elapsed="0.002691"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:42.756416" elapsed="0.003008"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.756397" elapsed="0.003059"/>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.762322" level="INFO">200</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T01:46:42.759782" elapsed="0.002607"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:42.759525" elapsed="0.002913"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.759507" elapsed="0.002966"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.763312" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($additional_allowed_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:42.762739" elapsed="0.000617"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:42.763876" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:42.763470" elapsed="0.000494"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.764659" level="INFO">${allowed_status_codes_list} = []</msg>
<var>${allowed_status_codes_list}</var>
<arg>${additional_allowed_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:42.764224" elapsed="0.000472"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:42.763999" elapsed="0.000771"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.763438" elapsed="0.001364"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.765541" level="INFO">${status_codes_type} = list</msg>
<var>${status_codes_type}</var>
<arg>type($explicit_status_codes).__name__</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:42.765023" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status_codes_type}&quot;!=&quot;list&quot;">
<kw name="Create List" owner="BuiltIn">
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:42.766068" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-04-16T01:46:42.765680" elapsed="0.000471"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.766852" level="INFO">${explicit_status_codes_list} = []</msg>
<var>${explicit_status_codes_list}</var>
<arg>${explicit_status_codes}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T01:46:42.766406" elapsed="0.000483"/>
</kw>
<status status="PASS" start="2026-04-16T01:46:42.766186" elapsed="0.000754"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.765654" elapsed="0.001317"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_status_codes_list}""" != """${NO_STATUS_CODES}"""</arg>
<arg>Collections.List_Should_Contain_Value</arg>
<arg>${explicit_status_codes_list}</arg>
<arg>${response.status_code}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-16T01:46:42.767182" elapsed="0.000526"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-04-16T01:46:42.768512" level="INFO">${final_allowd_list} = [200, 201, 204]</msg>
<var>${final_allowd_list}</var>
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${allowed_status_codes_list}</arg>
<doc>Combines the given ``lists`` together and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:42.768018" elapsed="0.000533"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="PASS" start="2026-04-16T01:46:42.768797" elapsed="0.003435"/>
</kw>
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="PASS" start="2026-04-16T01:46:42.755988" elapsed="0.016336"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-04-16T01:46:42.772572" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-04-16T01:46:42.772423" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-04-16T01:46:42.772397" elapsed="0.000297"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-16T01:46:42.772918" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-16T01:46:42.773016" elapsed="0.000020"/>
</return>
<msg time="2026-04-16T01:46:42.775836" level="INFO">${response_text} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776304002,"status":200}</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${access}</arg>
<arg>session=${session}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="PASS" start="2026-04-16T01:46:42.740759" elapsed="0.035108"/>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-04-16T01:46:42.775920" elapsed="0.000030"/>
</return>
<msg time="2026-04-16T01:46:42.776074" level="INFO">${data} = {"request":{"mbean":"org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter","attribute":"WriteOpStatus","type":"read"},"value":2,"timestamp":1776304002,"status":200}</msg>
<var>${data}</var>
<arg>${op_status_uri}</arg>
<arg>${controller_index}</arg>
<doc>Send a GET with the supplied uri to member ${member_index}.</doc>
<status status="PASS" start="2026-04-16T01:46:42.738855" elapsed="0.037245"/>
</kw>
<kw name="Json Parse From String" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.777093" level="INFO">${json_data} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 2, 'timestamp': 1776304002, 'status': 200}</msg>
<var>${json_data}</var>
<arg>json.loads('''${plain_string_with_json}''')</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:42.776666" elapsed="0.000456"/>
</kw>
<return>
<value>${json_data}</value>
<status status="PASS" start="2026-04-16T01:46:42.777170" elapsed="0.000030"/>
</return>
<msg time="2026-04-16T01:46:42.777332" level="INFO">${json} = {'request': {'mbean': 'org.opendaylight.openflowplugin.applications.bulk.o.matic:type=FlowCounter', 'attribute': 'WriteOpStatus', 'type': 'read'}, 'value': 2, 'timestamp': 1776304002, 'status': 200}</msg>
<var>${json}</var>
<arg>${data}</arg>
<doc>Parse given plain string into json (dictionary)</doc>
<status status="PASS" start="2026-04-16T01:46:42.776325" elapsed="0.001068"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-16T01:46:42.777777" level="INFO">${value} = 2</msg>
<var>${value}</var>
<arg>${json}</arg>
<arg>value</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T01:46:42.777574" elapsed="0.000244"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.778325" level="INFO">${value} = 2</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:42.777996" elapsed="0.000362"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.778827" level="INFO">${two} = 2</msg>
<var>${two}</var>
<arg>2</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-16T01:46:42.778544" elapsed="0.000309"/>
</kw>
<kw name="Should Start With" owner="BuiltIn">
<arg>${value}</arg>
<arg>${two}</arg>
<doc>Fails if the string ``str1`` does not start with the string ``str2``.</doc>
<status status="PASS" start="2026-04-16T01:46:42.779019" elapsed="0.000319"/>
</kw>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Checks to see if read or write operation is successfull in controller node.</doc>
<status status="PASS" start="2026-04-16T01:46:42.728091" elapsed="0.051310"/>
</kw>
<arg>${timeout}</arg>
<arg>1s</arg>
<arg>BulkomaticKeywords.Operation Status Check</arg>
<arg>${jolokia_write_op_status}</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-16T01:46:41.685706" elapsed="1.093746"/>
</kw>
<arg>${controller_index}</arg>
<arg>${timeout}</arg>
<doc>Wait Until Write operation status is OK in member 1.</doc>
<status status="PASS" start="2026-04-16T01:46:41.685308" elapsed="1.094208"/>
</kw>
<arg>${temp_json_config_del}</arg>
<arg>1</arg>
<arg>${operation_timeout}</arg>
<doc>Delete Bulk Flow in member ${controller_index} and wait until operation is completed.</doc>
<status status="PASS" start="2026-04-16T01:46:41.589565" elapsed="1.190007"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-16T01:46:42.780013" level="INFO">${config_datastore_delete_end_time} = 2026-04-16 01:46:42.780</msg>
<var>${config_datastore_delete_end_time}</var>
<arg>result_format=timestamp</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-16T01:46:42.779772" elapsed="0.000268"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-04-16T01:46:42.780571" level="INFO">${config_datastore_delete_time} = 1.198</msg>
<var>${config_datastore_delete_time}</var>
<arg>${config_datastore_delete_end_time}</arg>
<arg>${config_datastore_delete_start_time}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-04-16T01:46:42.780217" elapsed="0.000381"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.781178" level="INFO">${config_datastore_delete_rate} = 83472.45409015025</msg>
<var>${config_datastore_delete_rate}</var>
<arg>${flow_count_after_add} / ${config_datastore_delete_time}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T01:46:42.780794" elapsed="0.000411"/>
</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-04-16T01:46:42.781362" elapsed="0.000502"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_delete_time is ${config_datastore_delete_time}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:42.782039" elapsed="0.000413"/>
</kw>
<kw name="Log To Console" owner="BuiltIn">
<arg>The config_datastore_delete_rate is ${config_datastore_delete_rate}</arg>
<doc>Logs the given message to the console.</doc>
<status status="PASS" start="2026-04-16T01:46:42.782622" elapsed="0.000505"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.783642" level="INFO">${config_datastore_delete_time} = 1.198</msg>
<arg>${config_datastore_delete_time}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:42.783309" elapsed="0.000376"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-16T01:46:42.784181" level="INFO">${config_datastore_delete_rate} = 83472.45409015025</msg>
<arg>${config_datastore_delete_rate}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-16T01:46:42.783865" elapsed="0.000358"/>
</kw>
<doc>100K Flows deleted and verify.</doc>
<status status="PASS" start="2026-04-16T01:46:41.580469" elapsed="1.203868"/>
</test>
<test id="s1-t8" name="Log Results And Determine Status" line="149">
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:42.785359" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/rate.csv"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/rate.csv&lt;/a&gt;'.</msg>
<arg>${rate_results_file}</arg>
<arg>Config DS,OVS Switch,Operational DS\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:42.784982" elapsed="0.000436"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:42.785961" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/rate.csv"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/rate.csv&lt;/a&gt;'.</msg>
<arg>${rate_results_file}</arg>
<arg>${config_datastore_write_rate},${Mininet_write_rate},${oper_datastore_write_rate}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:42.785578" elapsed="0.000441"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:42.786422" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/time.csv"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/time.csv&lt;/a&gt;'.</msg>
<arg>${time_results_file}</arg>
<arg>Config DS,OVS Switch,Operational DS\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:42.786179" elapsed="0.000300"/>
</kw>
<kw name="Append To File" owner="OperatingSystem">
<msg time="2026-04-16T01:46:42.786974" level="INFO" html="true">Appended to file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/time.csv"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-titanium/time.csv&lt;/a&gt;'.</msg>
<arg>${time_results_file}</arg>
<arg>${config_datastore_write_time},${Mininet_write_time},${oper_datastore_write_time}\n</arg>
<doc>Appends the given content to the specified file.</doc>
<status status="PASS" start="2026-04-16T01:46:42.786637" elapsed="0.000391"/>
</kw>
<doc>Log results for plotting.</doc>
<status status="PASS" start="2026-04-16T01:46:42.784547" elapsed="0.002588"/>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-16T01:46:42.787829" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-16T01:46:42.787702" elapsed="0.000205"/>
</kw>
<doc>Test suite for 3Node Cluster - 100K flows and 10 DPNs in Cluster Scale Up scenario</doc>
<status status="PASS" start="2026-04-16T01:46:04.952308" elapsed="37.835635"/>
</suite>
<statistics>
<total>
<stat pass="8" fail="0" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="openflowplugin-perf-bulkomatic.txt" id="s1" pass="8" fail="0" skip="0">openflowplugin-perf-bulkomatic.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
