<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.5 (Python 3.11.10 on linux)" generated="2026-09-22T14:17:36.264443" rpa="false" schemaversion="5">
<suite id="s1" name="openflowplugin-perf-bulkomatic.txt" source="/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/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-09-22T14:17:36.891263" 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-09-22T14:17:36.889758" elapsed="0.001544"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-09-22T14:17:36.891512" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-09-22T14:17:36.891408" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-09-22T14:17:36.891381" elapsed="0.000203"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.892132" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.891789" elapsed="0.000391"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.892667" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or `default` if the variable does not exist.</doc>
<status status="PASS" start="2026-09-22T14:17:36.892357" elapsed="0.000353"/>
</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-09-22T14:17:36.893334" elapsed="0.000274"/>
</kw>
<msg time="2026-09-22T14:17:36.893731" level="INFO">${status} = PASS</msg>
<msg time="2026-09-22T14:17:36.893783" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible errorw.</doc>
<status status="PASS" start="2026-09-22T14:17:36.892899" elapsed="0.000928"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.894502" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-09-22T14:17:36.894017" elapsed="0.000512"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.895488" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-09-22T14:17:36.895215" elapsed="0.000301"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.895964" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-09-22T14:17:36.895667" elapsed="0.000325"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.896507" 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-09-22T14:17:36.896170" elapsed="0.000364"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.896997" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-09-22T14:17:36.896818" elapsed="0.000247"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.896593" elapsed="0.000500"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.897636" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.897304" elapsed="0.000374"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.898223" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.897893" elapsed="0.000372"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.898783" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.898451" elapsed="0.000388"/>
</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-09-22T14:17:36.894784" elapsed="0.004113"/>
</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-09-22T14:17:36.889011" elapsed="0.009940"/>
</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-09-22T14:17:36.901916" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-09-22T14:17:36.901548" elapsed="0.000394"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.902350" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-09-22T14:17:36.902091" elapsed="0.000283"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-09-22T14:17:36.902415" elapsed="0.000045"/>
</return>
<msg time="2026-09-22T14:17:36.902564" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-09-22T14:17:36.901180" elapsed="0.001406"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get From Dictionary" owner="Collections">
<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="NOT RUN" start="2026-09-22T14:17:36.902973" elapsed="0.000021"/>
</kw>
<kw name="Safe_Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<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="NOT RUN" start="2026-09-22T14:17:36.903219" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-09-22T14:17:36.902836" elapsed="0.000440"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.902691" elapsed="0.000611"/>
</for>
<arg>${karaf_log_level}</arg>
<doc>Cycle through indices (or all), run karaf command on each.</doc>
<status status="PASS" start="2026-09-22T14:17:36.900663" elapsed="0.002693"/>
</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-09-22T14:17:36.900140" elapsed="0.003257"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.903917" 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-09-22T14:17:36.903564" elapsed="0.000378"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.904425" level="INFO">${flow_count_after_add} = 100000</msg>
<arg>${flow_count_after_add}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.904126" elapsed="0.000339"/>
</kw>
<kw name="Set DPN And Flow Count In Json Add" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-09-22T14:17:36.905376" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_add_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_add_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-09-22T14:17:36.905517" 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-vanadium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-09-22T14:17:36.905247" elapsed="0.000295"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.905995" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.905728" elapsed="0.000292"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.906453" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.906188" elapsed="0.000289"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.906980" 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-09-22T14:17:36.906659" elapsed="0.000347"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.907427" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.907179" elapsed="0.000272"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.907913" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.907617" elapsed="0.000320"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.908398" 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-09-22T14:17:36.908115" elapsed="0.000308"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.908869" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.908596" elapsed="0.000297"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.909319" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.909060" elapsed="0.000283"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.909823" 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-09-22T14:17:36.909521" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.910283" 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-09-22T14:17:36.910054" elapsed="0.000273"/>
</kw>
<return>
<value>${json_body_add}</value>
<status status="PASS" start="2026-09-22T14:17:36.910365" elapsed="0.000030"/>
</return>
<msg time="2026-09-22T14:17:36.910500" 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-09-22T14:17:36.904728" elapsed="0.005826"/>
</kw>
<kw name="Set DPN And Flow Count In Json Get" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-09-22T14:17:36.911364" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_get_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_get_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-09-22T14:17:36.911484" 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-vanadium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-09-22T14:17:36.911246" elapsed="0.000262"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.911969" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.911679" elapsed="0.000317"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.912440" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.912177" elapsed="0.000287"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.912872" 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-09-22T14:17:36.912641" elapsed="0.000256"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.913310" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.913066" elapsed="0.000268"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.913775" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.913500" elapsed="0.000312"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.914192" 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-09-22T14:17:36.913992" elapsed="0.000226"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.914642" 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-09-22T14:17:36.914424" elapsed="0.000265"/>
</kw>
<return>
<value>${json_body_get}</value>
<status status="PASS" start="2026-09-22T14:17:36.914749" elapsed="0.000030"/>
</return>
<msg time="2026-09-22T14:17:36.914898" 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-09-22T14:17:36.910870" elapsed="0.004053"/>
</kw>
<kw name="Set DPN And Flow Count In Json Del" owner="BulkomaticKeywords">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-09-22T14:17:36.915664" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_del_bulk_flow_config.json"&gt;/w/workspace/openflowplugin-csit-1node-perf-bulkomatic-only-vanadium/test/csit/variables/openflowplugin/sal_del_bulk_flow_config.json&lt;/a&gt;'.</msg>
<msg time="2026-09-22T14:17:36.915797" 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-vanadium/test/csit/libraries/../variables/openflowplugin/${json_config}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-09-22T14:17:36.915534" elapsed="0.000303"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.916252" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.916004" elapsed="0.000271"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.916710" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.916439" elapsed="0.000297"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.917127" 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-09-22T14:17:36.916926" elapsed="0.000226"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.917560" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.917319" elapsed="0.000265"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.918078" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.917798" elapsed="0.000305"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.918488" 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-09-22T14:17:36.918279" elapsed="0.000234"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.918948" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.918680" elapsed="0.000292"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.919513" 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 variable.</doc>
<status status="PASS" start="2026-09-22T14:17:36.919137" elapsed="0.000400"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-09-22T14:17:36.919963" 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-09-22T14:17:36.919734" elapsed="0.000255"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.920410" 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-09-22T14:17:36.920195" elapsed="0.000258"/>
</kw>
<return>
<value>${json_body_del}</value>
<status status="PASS" start="2026-09-22T14:17:36.920491" elapsed="0.000028"/>
</return>
<msg time="2026-09-22T14:17:36.920624" 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-09-22T14:17:36.915165" elapsed="0.005483"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.921149" 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 the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.920869" elapsed="0.000320"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.921660" 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 the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.921382" elapsed="0.000340"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.922188" 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 the variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-09-22T14:17:36.921912" elapsed="0.000317"/>
</kw>
<doc>Initialize Variables and set the log.</doc>
<status status="PASS" start="2026-09-22T14:17:36.899011" elapsed="0.023308"/>
</test>
<test id="s1-t2" name="Start Mininet And verify Switches" line="53">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.923468" 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-09-22T14:17:36.923155" elapsed="0.000337"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.924129" 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-09-22T14:17:36.923687" elapsed="0.000467"/>
</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-09-22T14:17:36.927336" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-09-22T14:17:36.927014" elapsed="0.000346"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.927798" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="PASS" start="2026-09-22T14:17:36.927524" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-09-22T14:17:36.927878" elapsed="0.000029"/>
</return>
<msg time="2026-09-22T14:17:36.928009" level="INFO">${index_list} = []</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-09-22T14:17:36.926626" elapsed="0.001405"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.928432" level="INFO">Clear any existing mininet</msg>
<arg>Clear any existing mininet</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-22T14:17:36.928230" elapsed="0.000243"/>
</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 or task with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.930630" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-09-22T14:17:36.930387" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-09-22T14:17:36.930367" elapsed="0.000452"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-09-22T14:17:36.931182" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

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

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-09-22T14:17:36.931011" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.931837" level="INFO">Attempting to execute command "sudo mn -c" on remote system "" by user "jenkins" with keyfile pass "any" and prompt "&gt;" and password ""</msg>
<arg>Attempting to execute command "${cmd}" on remote system "${system}" by user "${user}" with keyfile pass "${keyfile_pass}" and prompt "${prompt}" and password "${password}"</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-09-22T14:17:36.931493" elapsed="0.000388"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-09-22T14:17:36.932379" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-22T14:17:36.932060" elapsed="0.000343"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.933490" level="INFO">Length is 0.</msg>
<msg time="2026-09-22T14:17:36.933565" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-09-22T14:17:36.933114" elapsed="0.000474"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-22T14:17:36.933753" elapsed="0.000316"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-09-22T14:17:36.934889" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-09-22T14:17:36.935424" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.934615" elapsed="0.003995">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-09-22T14:17:36.938671" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.934235" elapsed="0.004507"/>
</kw>
<arg>${user}</arg>
<arg>${password}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.932738" elapsed="0.006143">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<arg>${cmd}</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.939090" elapsed="0.000026"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.939256" elapsed="0.000023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.939474" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.939596" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-09-22T14:17:36.939557" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-09-22T14:17:36.939537" elapsed="0.000119"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.939763" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-09-22T14:17:36.939727" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-09-22T14:17:36.939711" elapsed="0.000131"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.939872" elapsed="0.000013"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-22T14:17:36.940560" 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-09-22T14:17:36.941068" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-09-22T14:17:36.941352" elapsed="0.000096"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-09-22T14:17:36.940178" elapsed="0.001316"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.929959" elapsed="0.011605">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-09-22T14:17:36.941613" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run Command On Remote System</arg>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.929429" elapsed="0.012262"/>
</kw>
<arg>${system}</arg>
<arg>sudo mn -c</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.929025" elapsed="0.012791">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Run Command On Mininet" owner="Utils">
<arg>${system}</arg>
<arg>sudo ps -elf | egrep 'usr/local/bin/mn' | egrep python | awk '{print "sudo kill -9",$4}' | sh</arg>
<doc>Call Run Comand On Remote System, but with default values suitable for Mininet machine.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.941978" elapsed="0.000022"/>
</kw>
<arg>${mininet}</arg>
<status status="FAIL" start="2026-09-22T14:17:36.928680" elapsed="0.013403">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<var>${mininet_conn_id}</var>
<arg>ip_address=${mininet}</arg>
<arg>timeout=${timeout}</arg>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.943764" elapsed="0.000025"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.944012" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="'${custom}' != '${EMPTY}'">
<kw name="Put File" owner="SSHLibrary">
<arg>${custom}</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.944274" elapsed="0.000018"/>
</kw>
<status status="NOT RUN" start="2026-09-22T14:17:36.944093" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-09-22T14:17:36.944075" elapsed="0.000271"/>
</if>
<if>
<branch type="IF" condition="'${protocol}' == 'ssl'">
<kw name="Install Certificates In Mininet" owner="MininetKeywords">
<doc>Copy and install certificates in simulator.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.944590" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-09-22T14:17:36.944396" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-09-22T14:17:36.944382" elapsed="0.000278"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>Start mininet ${options}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.944884" elapsed="0.000019"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<arg>sudo mn ${options}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.945048" elapsed="0.000018"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<arg>mininet&gt;</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.945205" elapsed="0.000017"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>Create controller configuration</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.945409" elapsed="0.000018"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${controller_opt}</var>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.945585" elapsed="0.000026"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Catenate" owner="BuiltIn">
<var>${controller_opt}</var>
<arg>${controller_opt}</arg>
<arg>${SPACE}${protocol}:${ODL_SYSTEM_${index}_IP}:${ofport}</arg>
<doc>Concatenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.945899" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${controller_opt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.946123" elapsed="0.000019"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-09-22T14:17:36.945734" elapsed="0.000435"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.945657" elapsed="0.000538"/>
</for>
<kw name="Log" owner="BuiltIn">
<arg>Open extra SSH connection to configure the OVS bridges</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.946384" elapsed="0.000018"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<arg>ip_address=${mininet}</arg>
<arg>timeout=${timeout}</arg>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.947923" elapsed="0.000024"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<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="NOT RUN" start="2026-09-22T14:17:36.948131" elapsed="0.000020"/>
</kw>
<kw name="Convert To Integer" owner="BuiltIn">
<var>${num_bridges}</var>
<arg>${num_bridges}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.948321" elapsed="0.000018"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${bridges}</var>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.948490" elapsed="0.000023"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<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="NOT RUN" start="2026-09-22T14:17:36.948794" elapsed="0.000032"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<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="NOT RUN" start="2026-09-22T14:17:36.949001" elapsed="0.000018"/>
</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="NOT RUN" start="2026-09-22T14:17:36.949158" elapsed="0.000019"/>
</kw>
<var name="${i}"/>
<status status="NOT RUN" start="2026-09-22T14:17:36.948616" elapsed="0.000590"/>
</iter>
<var>${i}</var>
<value>1</value>
<value>${num_bridges+1}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.948554" elapsed="0.000678"/>
</for>
<kw name="Log" owner="BuiltIn">
<arg>Configure OVS controllers ${controller_opt} in all bridges</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.949429" elapsed="0.000018"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Execute Command" owner="SSHLibrary">
<arg>sudo ovs-vsctl set-controller ${bridge} ${controller_opt}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.949722" elapsed="0.000020"/>
</kw>
<var name="${bridge}"/>
<status status="NOT RUN" start="2026-09-22T14:17:36.949542" elapsed="0.000229"/>
</iter>
<var>${bridge}</var>
<value>@{bridges}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.949491" elapsed="0.000304"/>
</for>
<kw name="Log" owner="BuiltIn">
<arg>Check OVS configuratiom</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.950007" elapsed="0.000019"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${output}</var>
<arg>sudo ovs-vsctl show</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.950210" elapsed="0.000026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.950464" elapsed="0.000020"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.950615" elapsed="0.000019"/>
</kw>
<return>
<value>${mininet_conn_id}</value>
<status status="NOT RUN" start="2026-09-22T14:17:36.950666" elapsed="0.000014"/>
</return>
<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="FAIL" start="2026-09-22T14:17:36.925961" elapsed="0.024816">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${mininet_conn_id}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-22T14:17:36.950982" elapsed="0.000019"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<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="NOT RUN" start="2026-09-22T14:17:36.951164" elapsed="0.000018"/>
</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="NOT RUN" start="2026-09-22T14:17:36.951342" elapsed="0.000019"/>
</kw>
<kw name="Run Keyword If Test Failed" owner="BuiltIn" type="TEARDOWN">
<kw name="Fatal Error" owner="BuiltIn">
<msg time="2026-09-22T14:17:36.952218" level="FAIL">AssertionError</msg>
<doc>Stops the whole execution.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.951994" elapsed="0.000289">AssertionError</status>
</kw>
<arg>Fatal Error</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.951614" elapsed="0.000706">AssertionError</status>
</kw>
<doc>Start mininet, controller OF port 6653 should be enabled for TLS while port 6633 should be for TCP.</doc>
<status status="FAIL" start="2026-09-22T14:17:36.922572" elapsed="0.029795">OSError: [Errno 16] Device or resource busy

Also teardown failed:
AssertionError</status>
</test>
<test id="s1-t3" name="Add Bulk Flow" line="71">
<doc>100K Flows (1K Flows per DPN) in 100 DPN added and verify it gets applied.</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.952685" elapsed="0.000441">Test execution stopped due to a fatal error.</status>
</test>
<test id="s1-t4" name="Verify Flows In Switch" line="87">
<doc>Verify 100K flows are installed in 100 switches.</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.953373" elapsed="0.000484">Test execution stopped due to a fatal error.</status>
</test>
<test id="s1-t5" name="Verify Flows In Oper DS" line="105">
<doc>Check Flows in Operational Datastore</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.954148" elapsed="0.000519">Test execution stopped due to a fatal error.</status>
</test>
<test id="s1-t6" name="Stop Mininet And Verify" line="124">
<doc>Stop mininet and exit connection.</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.954905" elapsed="0.000312">Test execution stopped due to a fatal error.</status>
</test>
<test id="s1-t7" name="Delete All Flows" line="134">
<doc>100K Flows deleted and verify.</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.955374" elapsed="0.000291">Test execution stopped due to a fatal error.</status>
</test>
<test id="s1-t8" name="Log Results And Determine Status" line="149">
<doc>Log results for plotting.</doc>
<tag>robot:exit</tag>
<status status="FAIL" start="2026-09-22T14:17:36.955944" elapsed="0.000477">Test execution stopped due to a fatal error.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-09-22T14:17:36.957358" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-09-22T14:17:36.957278" elapsed="0.000129"/>
</kw>
<doc>Test suite for 3Node Cluster - 100K flows and 10 DPNs in Cluster Scale Up scenario</doc>
<status status="FAIL" start="2026-09-22T14:17:36.265914" elapsed="0.691524"/>
</suite>
<statistics>
<total>
<stat pass="1" fail="7" skip="0">All Tests</stat>
</total>
<tag>
<stat info="combined" combined="NOT robot:exit" pass="1" fail="1" skip="0">NOT robot:exit</stat>
</tag>
<suite>
<stat name="openflowplugin-perf-bulkomatic.txt" id="s1" pass="1" fail="7" skip="0">openflowplugin-perf-bulkomatic.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
