<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-19T00:21:06.112529" rpa="false" schemaversion="5">
<suite id="s1" name="controller-akka1.txt" source="/w/workspace/controller-csit-1node-akka1-all-titanium/test/csit/suites/controller/akka_upgrade/1node.robot">
<kw name="Setup_Suite" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.756073" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:21:06.751036" elapsed="0.005120"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-19T00:21:06.750563" elapsed="0.005683"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.761786" 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-19T00:21:06.757884" elapsed="0.003935"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-19T00:21:06.762087" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:21:06.761935" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-04-19T00:21:06.761900" elapsed="0.000289"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.762813" 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-19T00:21:06.762394" elapsed="0.000473"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.763394" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-19T00:21:06.763060" elapsed="0.000365"/>
</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-19T00:21:06.763987" elapsed="0.000329"/>
</kw>
<msg time="2026-04-19T00:21:06.764469" level="INFO">${status} = PASS</msg>
<msg time="2026-04-19T00:21:06.764519" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:21:06.763593" elapsed="0.000950"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.765122" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:21:06.764709" elapsed="0.000441"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.766796" 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-19T00:21:06.766508" elapsed="0.000317"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.767247" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:21:06.766969" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.767780" 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-19T00:21:06.767434" elapsed="0.000379"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.770345" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-19T00:21:06.770157" elapsed="0.000262"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.767878" elapsed="0.002571"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.771031" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:21:06.770605" elapsed="0.000472"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.771637" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:21:06.771232" elapsed="0.000449"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.772239" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-19T00:21:06.771833" elapsed="0.000450"/>
</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-19T00:21:06.765897" elapsed="0.006480"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-19T00:21:06.757406" elapsed="0.015034"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.772630" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:21:06.772509" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-04-19T00:21:06.772489" elapsed="0.000211"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.775739" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:21:06.775351" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.776351" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:21:06.775917" elapsed="0.000467"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-19T00:21:06.776433" elapsed="0.000044"/>
</return>
<msg time="2026-04-19T00:21:06.776610" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-19T00:21:06.775012" elapsed="0.001622"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.776977" elapsed="0.000042"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-19T00:21:06.776806" elapsed="0.000255"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.776689" elapsed="0.000399"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-19T00:21:06.772923" elapsed="0.004220"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-19T00:21:06.777285" elapsed="0.000212"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.777812" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-19T00:21:06.777678" elapsed="0.000200"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.777551" elapsed="0.000353"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-19T00:21:06.756697" elapsed="0.021263"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.780551" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:21:06.780434" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-04-19T00:21:06.780413" elapsed="0.000208"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.785390" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-19T00:21:06.785274" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-19T00:21:06.785255" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.786402" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-19T00:21:06.786015" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.786863" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-19T00:21:06.786579" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-19T00:21:06.786935" elapsed="0.000030"/>
</return>
<msg time="2026-04-19T00:21:06.787107" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-19T00:21:06.785674" elapsed="0.001457"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.787474" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.787717" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-19T00:21:06.787572" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-04-19T00:21:06.787554" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-19T00:21:06.787343" elapsed="0.000472"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.787183" elapsed="0.000657"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-19T00:21:06.784962" elapsed="0.002933"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-19T00:21:06.778533" elapsed="0.009415"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-19T00:21:06.778121" elapsed="0.009867"/>
</kw>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-19T00:21:06.750195" elapsed="0.037858"/>
</kw>
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-19T00:21:06.792389" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x7892109c0b10&gt;, timeout=5, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-19T00:21:06.791941" elapsed="0.000620"/>
</kw>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-04-19T00:21:06.791471" elapsed="0.001194"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-19T00:21:06.797469" level="INFO">${odl_connection} = 1</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-19T00:21:06.796963" elapsed="0.000537"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-19T00:21:06.799631" level="INFO">Length is 0.</msg>
<msg time="2026-04-19T00:21:06.799716" 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-19T00:21:06.799087" elapsed="0.000653"/>
</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-19T00:21:06.799895" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-19T00:21:06.801161" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-19T00:21:06.801816" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.800812" elapsed="0.003891">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-19T00:21:06.804765" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.800455" elapsed="0.004367"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.798563" elapsed="0.006378">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-19T00:21:06.804990" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.798098" elapsed="0.006958"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.797705" elapsed="0.007451">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-19T00:21:06.805208" elapsed="0.000020"/>
</return>
<var>${connection}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.796591" elapsed="0.008717">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/controller-csit-1node-akka1-all-titanium/test/csit/suites/controller/akka_upgrade/../../../../tools/odl-mdsal-clustering-tests/${PYTHON_UTILITY_FILENAME}</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-19T00:21:06.805471" elapsed="0.000022"/>
</kw>
<doc>Activate dependency Resources, create SSH connection, copy Python utility.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.749753" elapsed="0.055833">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-t1" name="Select_Latest_Previous_Release_If_Not_Specified" line="71">
<doc>If previous ODL release is not specified, then latest release for previous to current stream is used.
Note: If current stream is not found on nexus, then it is taken as new one (not released yet).
So in this case, latest release version is return.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.805695" elapsed="0.000856">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t2" name="Kill_Original_Odl" line="82">
<doc>The ODL prepared by releng/builder is the newer one, kill it.
Also, remove journal and snapshots.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.806774" elapsed="0.000643">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t3" name="Install_Older_Odl" line="90">
<doc>Download .zip of older ODL, unpack, delete .zip, copy featuresBoot line.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.807617" elapsed="0.000420">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t4" name="Start_Older_Odl" line="119">
<doc>Start older ODL on background.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<status status="FAIL" start="2026-04-19T00:21:06.808220" elapsed="0.000368">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t5" name="Add_Data" line="127">
<doc>Put car data to config datastore of older ODL.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.808773" elapsed="0.000350">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t6" name="Remember_Data" line="134">
<doc>Get and save the stored data for later comparison.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.809309" elapsed="0.000341">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t7" name="Validate_Data" line="139">
<doc>Compare the saved data against what the data should look like.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.809832" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t8" name="Kill_Older_Odl" line="151">
<doc>Kill the older ODL immediatelly.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.810398" elapsed="0.000327">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t9" name="Transfer_Persisted_Data" line="155">
<doc>Move snapshots and (segmented-)journal into the original ODL installation.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.810918" elapsed="0.000414">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t10" name="Check_Snapshot_With_Transferred_Persisted_Data" line="162">
<doc>Fail if no snapshot file was created.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.811536" elapsed="0.000426">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t11" name="Start_Newer_Odl" line="166">
<doc>Start the newer ODL on background.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<status status="FAIL" start="2026-04-19T00:21:06.812270" elapsed="0.000351">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t12" name="Verify_Data_Is_Restored" line="171">
<doc>Wait until data check succeeds (there may be temporary 503).</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.812829" elapsed="0.000398">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-t13" name="Archive_Older_Karaf_Log" line="175">
<doc>Only original location benefits from automatic karaf.log archivation.</doc>
<tag>1node</tag>
<tag>carpeople</tag>
<tag>critical</tag>
<status status="FAIL" start="2026-04-19T00:21:06.813407" elapsed="0.000377">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<doc>Suite for testing upgrading persisted data from earlier release.

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

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


This suite kills the running (newer) ODL at its default location.
It then installs (configurable) older ODL to an alternative location,
pushes large amount of car data, verifies and kills the older ODL.
The journal and snapshot files are transferred to the default location
and the newer ODL is started.
Then it verifies the config data is still present and matches what was seen before.

In principle, the suite should also work if "newer" ODL is in fact older.
The limiting factor is featuresBoot, the value should be applicable to both ODL versions.

Note that in order to create traffic large enough for snapshots to be created,
this suite also actis as a stress test for Restconf.
But as that is not a primary focus of this suite,
data seen on newer ODL is only compared to what was seen on the older ODL
(stored in ${data_before} suite variable).

As using Robotframework would be both too slow and too memory consuming,
this suite uses a specialized Python utility for pushing the data locally on ODL_SYSTEM.
The utility filename is configurable, as there may be changes in PATCH behavior in future.

This suite uses relatively new support for PATCH http method.
It repetitively replaces a segment of cars with moving IDs,
so that there is a lot of data in journal (both write and delete),
but the overall size of data stored remains limited.

This is 1-node suite, but it still uses ClusterManagement.Check_Cluster_Is_In_Sync
in order to detect the same sync condition as 3-node suite would do.
Jolokia feature is required for that.

Minimal set of features to be installed: odl-restconf, odl-jolokia, odl-clustering-test-app.</doc>
<status status="FAIL" start="2026-04-19T00:21:06.114242" elapsed="0.699971">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<statistics>
<total>
<stat pass="0" fail="13" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="13" skip="0">1node</stat>
<stat pass="0" fail="13" skip="0">carpeople</stat>
<stat pass="0" fail="11" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-akka1.txt" id="s1" pass="0" fail="13" skip="0">controller-akka1.txt</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
