<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-21T00:47:41.414189" rpa="false" schemaversion="5">
<suite id="s1" name="bgpcep-userfeatures.txt">
<suite id="s1-s1" name="050 Bmp Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/050_bmp_basic.robot">
<kw name="Set_It_Up" type="SETUP">
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:41.913604" 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-21T00:47:41.913088" elapsed="0.000558"/>
</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-21T00:47:41.916218" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:41.916310" 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-21T00:47:41.915774" elapsed="0.000566"/>
</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-21T00:47:41.916507" elapsed="0.000384"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:41.917908" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:41.918438" 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-21T00:47:41.917404" elapsed="0.003769">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:41.921242" 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-21T00:47:41.917052" elapsed="0.004253"/>
</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-21T00:47:41.915295" elapsed="0.006140">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:41.921502" 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-21T00:47:41.914804" elapsed="0.006781"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.914231" elapsed="0.007469">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.921766" elapsed="0.000027"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.912687" elapsed="0.009196">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.922034" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.922189" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:41.922340" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:41.922291" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:41.922267" elapsed="0.000135"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.926029" elapsed="0.000029"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.908654" elapsed="0.017499">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.926370" elapsed="0.000023"/>
</kw>
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<var>${name}</var>
<arg>bgpcep</arg>
<arg>bgp-bmp-mock</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.936409" elapsed="0.000027"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${filename}</arg>
<arg>${name}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.936611" elapsed="0.000022"/>
</kw>
<doc>Create SSH session to ToolsVm, prepare HTTP client session to Controller.
Figure out latest pcc-mock version and download it from Nexus to ToolsVm.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.908158" elapsed="0.028568">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s1-t1" name="Verify BMP Feature" line="39">
<doc>Verifies if feature is up</doc>
<status status="FAIL" start="2026-04-21T00:47:41.936796" elapsed="0.000466">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t2" name="Start_Bmp_Mock" line="51">
<doc>Starts bmp-mock on tools vm</doc>
<status status="FAIL" start="2026-04-21T00:47:41.937479" elapsed="0.000438">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t3" name="Verify Data Reported" line="61">
<doc>Verifies if the tool reported expected data</doc>
<status status="FAIL" start="2026-04-21T00:47:41.938096" elapsed="0.000342">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t4" name="Stop_Bmp_Mock" line="73">
<doc>Send ctrl+c to bmp-mock to stop it</doc>
<status status="FAIL" start="2026-04-21T00:47:41.938657" elapsed="0.000392">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Tear_It_Down" type="TEARDOWN">
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-21T00:47:41.940158" level="FAIL">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</msg>
<arg>${BMP_LOG_FILE}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.939897" elapsed="0.000879">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-21T00:47:41.941255" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log"&gt;/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log&lt;/a&gt;'.</msg>
<msg time="2026-04-21T00:47:41.941395" level="INFO">${cnt} = None</msg>
<msg time="2026-04-21T00:47:41.941448" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log'</msg>
<var>${cnt}</var>
<arg>${BMP_LOG_FILE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.941081" elapsed="0.000448">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.942308" level="INFO">None</msg>
<arg>${cnt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.942038" elapsed="0.000318"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:41.942596" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:41.942513" elapsed="0.000138"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:41.942789" elapsed="0.000100"/>
</kw>
<doc>Download bmpmock.log and Log its contents.
Compute and Log the diff between expected and actual normalized responses.
Close both HTTP client session and SSH connection to Mininet.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.939616" elapsed="0.003389">Several failures occurred:

1) AttributeError: 'NoneType' object has no attribute 'open_sftp_client'

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log'</status>
</kw>
<doc>Basic tests for odl-bgpcep-bmp feature

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 is a basic suite for bgp monitoring protocol feature.
After the feature odl-bgpcep-bmp installation the port 12345 should be
bound for listening,
To test this feature bgp-bmp-mock tool is used. It is a part of the
bgpcep project. It is a java tool which simulates more peers and more
routers.
In this particular test suite it simulates 1 peer with 1 router, which
means it advertizes one peer ipv4 address towards odl. As a result one
route should appear in the rests/data/bmp-monitor:bmp-monitor?content=nonconfig.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.455789" elapsed="0.487278">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) AttributeError: 'NoneType' object has no attribute 'open_sftp_client'

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/bmpmock.log'</status>
</suite>
<suite id="s1-s2" name="Pcepuser" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/pcepuser/pcepuser.robot">
<kw name="Set_It_Up" type="SETUP">
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.013543" 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-21T00:47:42.013123" elapsed="0.000553"/>
</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-21T00:47:42.015304" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.015387" 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-21T00:47:42.015019" elapsed="0.000392"/>
</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-21T00:47:42.015570" elapsed="0.000340"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.016748" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.016996" 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-21T00:47:42.016406" elapsed="0.001019">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.017483" 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-21T00:47:42.016062" elapsed="0.001488"/>
</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-21T00:47:42.014603" elapsed="0.003073">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.017724" 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-21T00:47:42.014192" elapsed="0.003576"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.013874" elapsed="0.003988">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.017912" elapsed="0.000023"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.012841" elapsed="0.005174">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.018161" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.018307" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.018475" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.018430" elapsed="0.000100"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.018409" elapsed="0.000144"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.022391" elapsed="0.000027"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.009074" elapsed="0.013444">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.022665" elapsed="0.000022"/>
</kw>
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<var>${name}</var>
<arg>bgpcep</arg>
<arg>pcep-pcc-mock</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.033092" elapsed="0.000028"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${filename}</arg>
<arg>${name}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.033277" elapsed="0.000022"/>
</kw>
<kw name="Setup_Pcep_Operations" owner="PcepOperations">
<doc>Creates Requests session to be used by subsequent keywords.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.033512" elapsed="0.000042"/>
</kw>
<doc>Create SSH session to Mininet machine, prepare HTTP client session to Controller.
Figure out latest pcc-mock version and download it from Nexus to Mininet.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.008748" elapsed="0.024894">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s2-t1" name="Topology_Precondition" line="33">
<doc>Compare current pcep-topology to off_json variable.
Timeout is long enough to ODL boot, to see that pcep is ready, with no PCC is connected.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.033710" elapsed="0.000545">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t2" name="Start_Pcc_Mock" line="39">
<doc>Execute pcc-mock on Mininet, fail is Open is not sent, keep it running for next tests.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.034440" elapsed="0.000397">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t3" name="Configure_Speaker_Entity_Identifier" line="49">
<doc>Additional PCEP Speaker configuration for at least oxygen streams.
Allows PCEP speaker to determine if state synchronization can be skipped when a PCEP session is restarted.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.035011" elapsed="0.000580">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t4" name="Topology_Default" line="58">
<doc>Compare pcep-topology to default_json, which includes a tunnel from pcc-mock.
Timeout is lower than in Precondition, as state from pcc-mock should be updated quickly.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.035769" elapsed="0.000528">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t5" name="Update_Delegated" line="64">
<doc>Perform update-lsp on the mocked tunnel, check response is success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.036470" elapsed="0.000396">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t6" name="Topology_Updated" line="69">
<doc>Compare pcep-topology to default_json, which includes the updated tunnel.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.037034" elapsed="0.000358">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t7" name="Refuse_Remove_Delegated" line="74">
<doc>Perform remove-lsp on the mocked tunnel, check that mock-pcc has refused to remove it.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.037588" elapsed="0.000387">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t8" name="Topology_Still_Updated" line="80">
<doc>Compare pcep-topology to default_json, which includes the updated tunnel, to verify that refusal did not break topology.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.038143" elapsed="0.000457">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t9" name="Add_Instantiated" line="85">
<doc>Perform add-lsp to create new tunnel, check that response is success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.038764" elapsed="0.000350">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t10" name="Topology_Second_Default" line="90">
<doc>Compare pcep-topology to default_json, which includes the updated delegated and default instantiated tunnel.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.039280" elapsed="0.000447">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t11" name="Update_Instantiated" line="95">
<doc>Perform update-lsp on the newly instantiated tunnel, check that response is success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.039893" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t12" name="Topology_Second_Updated" line="100">
<doc>Compare pcep-topology to default_json, which includes the updated delegated and updated instantiated tunnel.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.040438" elapsed="0.000449">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t13" name="Remove_Instantiated" line="105">
<doc>Perform remove-lsp on the instantiated tunnel, check that response is success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.041049" elapsed="0.000375">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t14" name="Topology_Again_Updated" line="110">
<doc>Compare pcep-topology to default_json, which includes the updated tunnel, to verify that instantiated tunnel was removed.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.041614" elapsed="0.000442">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t15" name="Stop_Pcc_Mock" line="115">
<doc>Send ctrl+c to pcc-mock, fails if no prompt is seen
after 3 seconds (the default for SSHLibrary)</doc>
<status status="FAIL" start="2026-04-21T00:47:42.042221" elapsed="0.000395">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s2-t16" name="Topology_Postcondition" line="122">
<doc>Compare curent pcep-topology to "off_json" again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.042809" elapsed="0.000335">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Tear_It_Down" type="TEARDOWN">
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.043930" level="FAIL">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</msg>
<arg>pccmock.log</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.043775" elapsed="0.000526">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-04-21T00:47:42.045043" level="INFO">Running command 'cat pccmock.log 2&gt;&amp;1'.</msg>
<msg time="2026-04-21T00:47:42.047051" level="INFO">${pccmocklog} = cat: pccmock.log: No such file or directory</msg>
<var>${pccmocklog}</var>
<arg>cat pccmock.log</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-04-21T00:47:42.044451" elapsed="0.002629"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.047503" level="INFO">cat: pccmock.log: No such file or directory</msg>
<arg>${pccmocklog}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.047227" elapsed="0.000331"/>
</kw>
<kw name="Teardown_Pcep_Operations" owner="PcepOperations">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.047996" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.047924" elapsed="0.000121"/>
</kw>
<doc>Teardown to pair with Setup (otherwise no-op).</doc>
<status status="PASS" start="2026-04-21T00:47:42.047733" elapsed="0.000366"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.048338" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.048267" elapsed="0.000131"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.048572" elapsed="0.000098"/>
</kw>
<doc>Download pccmock.log and Log its contents.
Compute and Log the diff between expected and actual normalized responses.
Close both HTTP client session and SSH connection to Mininet.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.043574" elapsed="0.005197">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</kw>
<doc>Basic tests for odl-bgpcep-pcep-all feature.

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

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html</doc>
<status status="FAIL" start="2026-04-21T00:47:41.943674" elapsed="0.105169">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</suite>
<suite id="s1-s3" name="Bgp Functional Md5" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/bgp_functional_md5.robot">
<kw name="Start_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-21T00:47:42.252484" 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-21T00:47:42.248242" elapsed="0.004303"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:42.248018" elapsed="0.004591"/>
</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-21T00:47:42.257586" 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-21T00:47:42.253918" elapsed="0.003697"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.257815" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.257704" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.257678" elapsed="0.000207"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.258399" 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-21T00:47:42.258041" elapsed="0.000401"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.258940" 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-21T00:47:42.258620" elapsed="0.000347"/>
</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-21T00:47:42.259477" elapsed="0.000305"/>
</kw>
<msg time="2026-04-21T00:47:42.259894" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.259942" 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-21T00:47:42.259134" elapsed="0.000831"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.260531" 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-21T00:47:42.260135" elapsed="0.000424"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.261614" 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-21T00:47:42.261333" elapsed="0.000308"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.262046" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.261791" elapsed="0.000280"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.262596" 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-21T00:47:42.262228" elapsed="0.000396"/>
</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-21T00:47:42.265345" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.265153" elapsed="0.000300"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.262686" elapsed="0.002800"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.266084" 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-21T00:47:42.265674" elapsed="0.000454"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.266720" 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-21T00:47:42.266295" elapsed="0.000468"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.267321" 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-21T00:47:42.266931" elapsed="0.000433"/>
</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-21T00:47:42.260882" elapsed="0.006540"/>
</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-21T00:47:42.253577" elapsed="0.013900"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.267686" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.267569" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.267548" elapsed="0.000209"/>
</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-21T00:47:42.270784" 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-21T00:47:42.270386" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.271259" 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-21T00:47:42.270972" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.271331" elapsed="0.000034"/>
</return>
<msg time="2026-04-21T00:47:42.271531" 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-21T00:47:42.270061" elapsed="0.001496"/>
</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-21T00:47:42.271901" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.271725" elapsed="0.000235"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.271612" elapsed="0.000375"/>
</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-21T00:47:42.267977" elapsed="0.004064"/>
</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-21T00:47:42.272195" elapsed="0.000209"/>
</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-21T00:47:42.272740" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.272598" elapsed="0.000206"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.272457" elapsed="0.000374"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:42.252968" elapsed="0.019918"/>
</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-21T00:47:42.275520" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.275378" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.275358" elapsed="0.000234"/>
</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-21T00:47:42.280306" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.280194" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.280175" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.281331" 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-21T00:47:42.280950" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.281819" 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-21T00:47:42.281532" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.281889" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.282079" 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-21T00:47:42.280610" elapsed="0.001495"/>
</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-21T00:47:42.282468" elapsed="0.000036"/>
</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-21T00:47:42.282737" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.282585" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.282567" elapsed="0.000245"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.282322" elapsed="0.000515"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.282159" elapsed="0.000705"/>
</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-21T00:47:42.279909" elapsed="0.003022"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:42.273460" elapsed="0.009526"/>
</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-21T00:47:42.273045" elapsed="0.009984"/>
</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-21T00:47:42.247692" elapsed="0.035385"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.283646" level="INFO">${tools_system_conn_id} = 1</msg>
<var>${tools_system_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.283227" elapsed="0.000445"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.284161" level="INFO">${tools_system_conn_id} = 1</msg>
<arg>${tools_system_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.283841" elapsed="0.000361"/>
</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-21T00:47:42.286089" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.286167" 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-21T00:47:42.285621" elapsed="0.000570"/>
</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-21T00:47:42.286353" elapsed="0.000339"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.287601" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.287859" 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-21T00:47:42.287253" elapsed="0.001049">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.288360" 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-21T00:47:42.286886" elapsed="0.001523"/>
</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-21T00:47:42.285169" elapsed="0.003373">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.288592" 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-21T00:47:42.284775" elapsed="0.003875"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.284406" elapsed="0.004334">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.288957" elapsed="0.000025"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.289186" elapsed="0.000024"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==3.4.17</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.289396" elapsed="0.000023"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.289585" elapsed="0.000022"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.289803" elapsed="0.000022"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.247356" elapsed="0.042549">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s3-t1" name="Verify Exabgp Connected" line="43">
<doc>Verifies exabgp connected with md5 settings</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.289968" elapsed="0.000386">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s3-t2" name="Verify Exabgp Not Connected" line="54">
<doc>Verifies exabgp connected with md5 settings</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.290605" elapsed="0.000430">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.296910" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.296584" elapsed="0.000353"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.298370" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:42.298542" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:42.298594" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:42.298635" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:42.298675" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.298165" elapsed="0.000809">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.300112" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.299665" elapsed="0.000594">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:42.300371" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:42.300415" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.299168" elapsed="0.001269"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.301049" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:42.300627" elapsed="0.000449"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.302117" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.301870" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.302590" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.302325" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.303022" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.302785" elapsed="0.000279"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:42.301518" elapsed="0.001600"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:42.301160" elapsed="0.001993"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.301137" elapsed="0.002045"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.303338" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.303239" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.303222" elapsed="0.000181"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.303559" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.303453" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.303439" elapsed="0.000184"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.304113" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.303763" elapsed="0.000409">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:42.297625" elapsed="0.006680">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:42.304361" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.297097" elapsed="0.007320"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.295970" elapsed="0.008576">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:42.304600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.292259" elapsed="0.012394"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.291910" elapsed="0.012851">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.291685" elapsed="0.013214">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.305057" elapsed="0.000102"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.305374" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.305305" elapsed="0.000114"/>
</kw>
<doc>Suite teardown keyword with old rib restoration</doc>
<status status="FAIL" start="2026-04-21T00:47:42.291395" elapsed="0.014133">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Functional test suite for bgp - n-path and all-path selection

Copyright (c) 2017 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 tests tcpmd5 connection of bgp peers. It uses odl and exabgp as bgp
peer. No routes are advertized, simple peer presence in the datastore is tested.
are configured via application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.049453" elapsed="0.256129">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</suite>
<suite id="s1-s4" name="Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/basic.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.390311" 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-21T00:47:42.386132" elapsed="0.004226"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:42.385914" elapsed="0.004505"/>
</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-21T00:47:42.395135" 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-21T00:47:42.391509" elapsed="0.003652"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.395340" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.395238" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.395217" elapsed="0.000187"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.395937" 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-21T00:47:42.395578" elapsed="0.000402"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.396454" 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-21T00:47:42.396143" elapsed="0.000337"/>
</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-21T00:47:42.396997" elapsed="0.000277"/>
</kw>
<msg time="2026-04-21T00:47:42.397370" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.397422" 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-21T00:47:42.396661" elapsed="0.000783"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.397994" 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-21T00:47:42.397628" elapsed="0.000391"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.399031" 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-21T00:47:42.398768" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.399461" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.399209" elapsed="0.000278"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.399953" 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-21T00:47:42.399664" elapsed="0.000315"/>
</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-21T00:47:42.402631" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.402408" elapsed="0.000296"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.400032" elapsed="0.002700"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.403290" 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-21T00:47:42.402893" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.403905" 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-21T00:47:42.403508" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.404502" 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-21T00:47:42.404110" elapsed="0.000478"/>
</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-21T00:47:42.398281" elapsed="0.006366"/>
</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-21T00:47:42.391155" elapsed="0.013546"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.404878" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.404766" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.404747" elapsed="0.000196"/>
</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-21T00:47:42.408014" 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-21T00:47:42.407635" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.408485" 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-21T00:47:42.408201" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.408577" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.408730" 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-21T00:47:42.407284" elapsed="0.001469"/>
</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-21T00:47:42.409096" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.408920" elapsed="0.000235"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.408807" elapsed="0.000374"/>
</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-21T00:47:42.405160" elapsed="0.004073"/>
</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-21T00:47:42.409384" elapsed="0.000226"/>
</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-21T00:47:42.409936" elapsed="0.000029"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.409792" elapsed="0.000216"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.409662" elapsed="0.000371"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:42.390728" elapsed="0.019358"/>
</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-21T00:47:42.412667" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.412558" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.412540" elapsed="0.000194"/>
</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-21T00:47:42.417413" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.417307" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.417290" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.418431" 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-21T00:47:42.418047" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.418920" 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-21T00:47:42.418634" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.418989" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.419141" 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-21T00:47:42.417724" elapsed="0.001441"/>
</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-21T00:47:42.419547" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.419793" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.419646" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.419629" elapsed="0.000237"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.419377" elapsed="0.000545"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.419221" elapsed="0.000730"/>
</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-21T00:47:42.417028" elapsed="0.002977"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:42.410678" elapsed="0.009380"/>
</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-21T00:47:42.410238" elapsed="0.009866"/>
</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-21T00:47:42.385604" elapsed="0.034552"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-21T00:47:42.420378" elapsed="0.000198"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.420734" elapsed="0.000194"/>
</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-21T00:47:42.422806" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.422884" 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-21T00:47:42.422333" elapsed="0.000576"/>
</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-21T00:47:42.423068" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.424251" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.424505" 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-21T00:47:42.423932" elapsed="0.000994">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.425014" 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-21T00:47:42.423574" elapsed="0.001489"/>
</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-21T00:47:42.421892" elapsed="0.003291">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.425232" 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-21T00:47:42.421486" elapsed="0.003788"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.421126" elapsed="0.004235">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.425637" elapsed="0.000025"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.425895" elapsed="0.000024"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.426072" elapsed="0.000020"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.426242" elapsed="0.000020"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.426618" elapsed="0.000024"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.426965" elapsed="0.000028"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.427312" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
put Python tool to mininet machine, setup imported resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.385301" elapsed="0.042118">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s4-t1" name="Check_For_Empty_Topology_Before_Talking" line="76">
<doc>Sanity check example-ipv4-topology is up but empty.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.427479" elapsed="0.000437">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t2" name="TC_LA_Reconfigure_Odl_To_Initiate_Connection" line="81">
<doc>Configure ibgp peer with local-address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.428083" elapsed="0.000352">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t3" name="TC_LA_Start_Bgp_Speaker_And_Verify_Connected" line="96">
<doc>Verify that peer is present in odl's rib under local-address ip.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.428619" elapsed="0.000417">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t4" name="TC_LA_Kill_Bgp_Speaker" line="107">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.429217" elapsed="0.000385">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t5" name="TC_LA_Delete_Bgp_Peer_Configuration" line="116">
<doc>Delete peer configuration.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.429803" elapsed="0.000309">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t6" name="Reconfigure_ODL_To_Accept_Connection" line="124">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.430270" elapsed="0.000404">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t7" name="Start_Talking_BGP_speaker" line="142">
<doc>Start Python speaker to connect to ODL, verify that the tool does not promptly exit.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.430840" elapsed="0.000388">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t8" name="Check_Talking_Connection_Is_Established" line="149">
<doc>See TCP (BGP) connection in established state.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.431391" elapsed="0.000385">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t9" name="Check_Talking_Topology_Is_Filled" line="154">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.431942" elapsed="0.000419">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t10" name="TC_R_Reset_Bgp_Peer_Session" line="159">
<doc>Reset Peer Session</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.432548" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t11" name="TC_R_Check_For_Empty_Topology_After_Resetting" line="168">
<doc>See example-ipv4-topology empty after resetting session</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.433050" elapsed="0.000401">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t12" name="TC_PG_Reconfigure_ODL_With_Peer_Group_To_Accept_Connection" line="173">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.433642" elapsed="0.000424">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t13" name="TC_PG_Restart_Talking_BGP_Speaker" line="202">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.434231" elapsed="0.000399">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t14" name="TC_PG_Check_Talking_Topology_Is_Filled" line="209">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.434794" elapsed="0.000434">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t15" name="TC_PG_Reconfigure_ODL_With_Peer_Group_Without_Ipv4_Unicast" line="214">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.435395" elapsed="0.000441">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t16" name="TC_PG_Check_For_Empty_Topology_After_Deconfiguration" line="219">
<doc>See example-ipv4-topology empty after resetting session.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.436002" elapsed="0.000416">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t17" name="TC_PG_Reconfigure_ODL_To_Accept_Connection" line="224">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.436602" elapsed="0.000420">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t18" name="Kill_Talking_BGP_Speaker" line="248">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.437187" elapsed="0.000409">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t19" name="Check_For_Empty_Topology_After_Talking" line="257">
<doc>See example-ipv4-topology empty again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.437768" elapsed="0.000363">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t20" name="Start_Listening_BGP_Speaker" line="262">
<doc>Start Python speaker in listening mode, verify that the tool does not exit quickly.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.438297" elapsed="0.000416">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t21" name="Check_Listening_Connection_Is_Not_Established_Yet" line="268">
<doc>See no TCP connection, as both ODL and tool are in listening mode.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.438877" elapsed="0.001587">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t22" name="Check_For_Empty_Topology_Before_Listening" line="272">
<doc>Sanity check example-ipv4-topology is still empty.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.440665" elapsed="0.000383">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t23" name="Reconfigure_ODL_To_Initiate_Connection" line="277">
<doc>Replace BGP peer config module, now with initiate-connection set to true.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.441217" elapsed="0.000414">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t24" name="Check_Listening_Connection_Is_Established" line="294">
<doc>See TCP (BGP) connection in established state.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.441799" elapsed="0.000358">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t25" name="Check_Listening_Topology_Is_Filled" line="298">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.442324" elapsed="0.002243">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t26" name="Kill_Listening_BGP_Speaker" line="303">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.444756" elapsed="0.000380">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t27" name="Check_For_Empty_Topology_After_Listening" line="312">
<doc>Post-condition: Check example-ipv4-topology is empty again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.445308" elapsed="0.000416">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t28" name="Start_Listening_BGP_Speaker_Case_2" line="317">
<doc>BGP Speaker introduces 2 prefixes in the first update &amp; another 2 prefixes while the very first is withdrawn in 2nd update</doc>
<status status="FAIL" start="2026-04-21T00:47:42.445887" elapsed="0.000468">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t29" name="Check_Listening_Connection_Is_Established_Case_2" line="323">
<doc>See TCP (BGP) connection in established state.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.446531" elapsed="0.000373">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t30" name="Check_Listening_Topology_Is_Filled_Case_2" line="327">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.447093" elapsed="0.000449">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t31" name="Kill_Listening_BGP_Speaker_Case_2" line="332">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.447713" elapsed="0.000380">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t32" name="Check_For_Empty_Topology_After_Listening_Case_2" line="341">
<doc>Post-condition: Check example-ipv4-topology is empty again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.448281" elapsed="0.000442">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t33" name="Start_Listening_BGP_Speaker_Case_3" line="346">
<doc>BGP Speaker introduces 3 prefixes while the first one occures again in the withdrawn list (to be ignored by controller)</doc>
<status status="FAIL" start="2026-04-21T00:47:42.448885" elapsed="0.000456">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t34" name="Check_Listening_Connection_Is_Established_Case_3" line="352">
<doc>See TCP (BGP) connection in established state.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.449527" elapsed="0.000373">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t35" name="Check_Listening_Topology_Is_Filled_Case_3" line="356">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.450065" elapsed="0.000447">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t36" name="Kill_Listening_BGP_Speaker_Case_3" line="361">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.450683" elapsed="0.000381">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t37" name="Check_For_Empty_Topology_After_Listening_Case_3" line="370">
<doc>Post-condition: Check example-ipv4-topology is empty again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.451234" elapsed="0.000422">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s4-t38" name="Delete_Bgp_Peer_Configuration" line="375">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.451822" elapsed="0.000397">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.453696" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:42.453816" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:42.453855" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.453557" elapsed="0.000598">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:42.454219" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:42.454418" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.453263" elapsed="0.001182">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.454892" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.454632" elapsed="0.000304"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.455825" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:42.455867" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.455460" elapsed="0.000544">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.456202" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.456089" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.456070" elapsed="0.000195"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.456607" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:42.481756" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:42.481808" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.456413" elapsed="0.025765">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.482740" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.482399" elapsed="0.000389"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.483188" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:42.483319" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:42.483363" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:42.483401" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.483000" elapsed="0.000718">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.455169" elapsed="0.028699">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.452986" elapsed="0.030997">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.484219" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.484144" elapsed="0.000125"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.484415" elapsed="0.000119"/>
</kw>
<doc>Make sure Python tool was killed, delete all sessions, tear down imported Resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.452707" elapsed="0.031940">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<doc>Basic tests for odl-bgpcep-bgp-all feature.

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

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

Test suite performs basic BGP functional test cases:
BGP peer initiated connection
- introduce and check 3 prefixes in one update message
ODL controller initiated connection:
- introduce and check 3 prefixes in one update message
- introduce 2 prefixes in first update message and then additional 2 prefixes
in another update while the very first prefix is withdrawn
- introduce 3 prefixes and try to withdraw the first one
(to be ignored by controller) in a single update message

TC_R (test case reset) tests session-reset functionality.
Resets the session, and than verifies that example-ipv4-topology is empty again.

TC_LA (test case local address) tests configuration of internal peer
with local-address configured
- configure peer with local-address and connect bgp-speaker to it
with tools_system_ip
- check filled topology

TC_PG (test case peer group) tests configuration and reconfiguration
of peer-groups and neighbors configured by them.
- configure peer-group, and assign neighbor to this peer-group
- check filled topology
- reconfigure peer-group without ipv4 unicast afi-safi
- check empty topology
- reconfigre neighbor without peer-group, delete peer-group

Brief description how to perform BGP functional test:
https://wiki.opendaylight.org/view/BGP_LS_PCEP:Lithium_Feature_Tests#How_to_test_2</doc>
<status status="FAIL" start="2026-04-21T00:47:42.306176" elapsed="0.178653">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</suite>
<suite id="s1-s5" name="Bgp Ipv6 Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/bgp_ipv6_basic.robot">
<kw name="Start_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-21T00:47:42.571775" 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-21T00:47:42.567141" elapsed="0.004682"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:42.566919" elapsed="0.004966"/>
</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-21T00:47:42.576794" 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-21T00:47:42.572961" elapsed="0.003862"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.577022" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.576907" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.576884" elapsed="0.000207"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.577625" 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-21T00:47:42.577246" elapsed="0.000424"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.578146" 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-21T00:47:42.577833" elapsed="0.000339"/>
</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-21T00:47:42.578698" elapsed="0.000299"/>
</kw>
<msg time="2026-04-21T00:47:42.579099" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.579146" 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-21T00:47:42.578338" elapsed="0.000833"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.579748" 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-21T00:47:42.579339" elapsed="0.000435"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.580749" 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-21T00:47:42.580465" elapsed="0.000310"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.581180" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.580925" elapsed="0.000281"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.581676" 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-21T00:47:42.581363" elapsed="0.000340"/>
</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-21T00:47:42.584379" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.584191" elapsed="0.000261"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.581759" elapsed="0.002721"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.585055" 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-21T00:47:42.584655" elapsed="0.000443"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.585675" 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-21T00:47:42.585259" elapsed="0.000459"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.586308" 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-21T00:47:42.585919" elapsed="0.000432"/>
</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-21T00:47:42.580016" elapsed="0.006394"/>
</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-21T00:47:42.572622" elapsed="0.013845"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.586764" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.586549" elapsed="0.000262"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.586530" elapsed="0.000304"/>
</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-21T00:47:42.589987" 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-21T00:47:42.589605" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.590465" 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-21T00:47:42.590177" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.590561" elapsed="0.000041"/>
</return>
<msg time="2026-04-21T00:47:42.590732" 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-21T00:47:42.589257" elapsed="0.001500"/>
</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-21T00:47:42.591092" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.590918" elapsed="0.000234"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.590809" elapsed="0.000368"/>
</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-21T00:47:42.587054" elapsed="0.004175"/>
</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-21T00:47:42.591380" elapsed="0.000226"/>
</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-21T00:47:42.591909" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.591772" elapsed="0.000200"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.591656" elapsed="0.000342"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:42.572172" elapsed="0.019878"/>
</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-21T00:47:42.594748" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.594638" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.594621" elapsed="0.000195"/>
</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-21T00:47:42.599713" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.599608" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.599590" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.601806" 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-21T00:47:42.600321" elapsed="0.001515"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.602306" 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-21T00:47:42.601998" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.602376" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.602557" 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-21T00:47:42.599999" elapsed="0.002582"/>
</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-21T00:47:42.603013" elapsed="0.000027"/>
</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-21T00:47:42.603275" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.603127" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.603109" elapsed="0.000357"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.602851" elapsed="0.000685"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.602637" elapsed="0.000939"/>
</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-21T00:47:42.599300" elapsed="0.004333"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:42.592632" elapsed="0.011122"/>
</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-21T00:47:42.592203" elapsed="0.011614"/>
</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-21T00:47:42.566611" elapsed="0.037263"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.604459" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${ODL_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=10s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.604042" elapsed="0.000444"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.605007" level="INFO">${conn_id} = 1</msg>
<arg>${conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.604676" elapsed="0.000372"/>
</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-21T00:47:42.607368" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.607448" 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-21T00:47:42.606737" elapsed="0.000735"/>
</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-21T00:47:42.607656" elapsed="0.000360"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.608916" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.609215" 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-21T00:47:42.608595" elapsed="0.001092">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.609774" 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-21T00:47:42.608213" elapsed="0.001609"/>
</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-21T00:47:42.606079" elapsed="0.003847">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.609974" 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-21T00:47:42.605646" elapsed="0.004379"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.605257" elapsed="0.004862">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Configure_Ipv6_Network">
<doc>Reconfigures basic network settings on controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.610293" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.610535" elapsed="0.000024"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.610741" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==4.2.4</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.610944" elapsed="0.000023"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.611163" elapsed="0.000022"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.611369" elapsed="0.000021"/>
</kw>
<kw name="Upload_Config_Files_exabgp_ipv4">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.611575" elapsed="0.000022"/>
</kw>
<kw name="Upload_Config_Files_exabgp_graceful_restart">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.611765" elapsed="0.000021"/>
</kw>
<kw name="Upload_Config_Files_Exabgp_AS_Value_Reconfigured">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.611951" elapsed="0.000021"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.566311" elapsed="0.045756">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s5-t1" name="Reconfigure_ODL_To_Accept_Connections" line="61">
<doc>Configure BGP peer modules with initiate-connection set to false with short ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.612126" elapsed="0.000496">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t2" name="Start_Exabgp" line="77">
<doc>Start exabgp with</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.612795" elapsed="0.000419">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t3" name="Verify_Ipv6_Topology_Filled" line="83">
<doc>Verifies that example-ipv6-topology is filled after starting exabgp.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.613389" elapsed="0.000413">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t4" name="Delete_Bgp_Peer_Configuration" line="88">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.613964" elapsed="0.000465">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t5" name="Verify_Ipv6_Topology_Empty" line="101">
<doc>Verifies that example-ipv6-topology is empty after deconfiguring peer for the first time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.614728" elapsed="0.000476">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t6" name="Reconfigure_ODL_To_Accept_Connections_2" line="106">
<doc>Configure BGP peer modules with initiate-connection set to false with ipv6 address without "::" shortened version.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.615378" elapsed="0.000475">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t7" name="Verify_Ipv6_Topology_Filled_2" line="122">
<doc>Verifies that example-ipv6-topology is filled after configuring the peer for the second time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.616017" elapsed="0.000607">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t8" name="Delete_Bgp_Peer_Configuration_2" line="127">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.616807" elapsed="0.000391">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t9" name="Verify_Ipv6_Topology_Empty_2" line="140">
<doc>Verifies that example-ipv6-topology is empty after deconfiguring peer for the second time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.617370" elapsed="0.000483">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t10" name="Reconfigure_ODL_To_Accept_Connections_3" line="145">
<doc>Configure BGP peer modules with initiate-connection set to false with full text ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.618023" elapsed="0.000416">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t11" name="Verify_Ipv6_Topology_Filled_3" line="161">
<doc>Verifies that example-ipv6-topology is filled after configuring the peer for the third time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.618619" elapsed="0.000430">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t12" name="Delete_Bgp_Peer_Configuration_3" line="166">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.619223" elapsed="0.000439">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t13" name="Verify_Ipv6_Topology_Empty_3" line="179">
<doc>Verifies that example-ipv6-topology is empty after final deconfiguration.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.619831" elapsed="0.000489">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t14" name="Stop_All_Exabgps" line="184">
<doc>Save exabgp logs as exaipv6.log, and stop exabgp with ctrl-c bash signal</doc>
<status status="FAIL" start="2026-04-21T00:47:42.620486" elapsed="0.000395">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t15" name="Configure_App_Peer" line="189">
<doc>Configures bgp application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.621047" elapsed="0.000392">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t16" name="Reconfigure_ODL_To_Accept_Connections_4" line="206">
<doc>Configure BGP peer modules with initiate-connection set to false with short ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.621632" elapsed="0.000438">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t17" name="Start_Exabgp_2" line="228">
<doc>Start exabgp and Verify BGP connection</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.622249" elapsed="0.000342">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t18" name="Inject_Ipv6_Route_1" line="234">
<doc>Inject the Ipv6 route from controller</doc>
<status status="FAIL" start="2026-04-21T00:47:42.622808" elapsed="0.000318">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t19" name="Check_Ipv6_Prefix_In_Bgp_Rib_1" line="250">
<doc>Check for the presence of Ipv6 Prefix in the BGP RIB</doc>
<status status="FAIL" start="2026-04-21T00:47:42.623291" elapsed="0.000370">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t20" name="Delete_Injected_Ipv6_Routes_1" line="269">
<doc>Delete the injected IPV6 routes</doc>
<status status="FAIL" start="2026-04-21T00:47:42.623832" elapsed="0.000581">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t21" name="Delete_Bgp_Peer_Configuration_4" line="286">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.624600" elapsed="0.000387">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t22" name="Verify_Ipv6_Topology_Empty_4" line="302">
<doc>Verifies that example-ipv6-topology is empty after deconfiguring peer for the first time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.625162" elapsed="0.000479">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t23" name="Reconfigure_ODL_To_Accept_Connections_5" line="307">
<doc>Configure BGP peer modules with initiate-connection set to false with short ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.625810" elapsed="0.000413">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t24" name="Inject_Ipv6_Route_2" line="323">
<doc>Inject the Ipv6 route from controller</doc>
<status status="FAIL" start="2026-04-21T00:47:42.626391" elapsed="0.000348">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t25" name="Check_Ipv6_Prefix_In_Bgp_Rib_2" line="339">
<doc>Check for the presence of Ipv6 Prefix in the BGP RIB</doc>
<status status="FAIL" start="2026-04-21T00:47:42.626905" elapsed="0.000391">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t26" name="Delete_Injected_Ipv6_Routes_2" line="358">
<doc>Delete the injected IPV6 routes</doc>
<status status="FAIL" start="2026-04-21T00:47:42.627457" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t27" name="Delete_App_Peer" line="375">
<doc>Deletes bgp application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.627943" elapsed="0.000277">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t28" name="Delete_Bgp_Peer_Configuration_5" line="392">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.628376" elapsed="0.000401">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t29" name="Verify_Ipv6_Topology_Empty_5" line="405">
<doc>Verifies that example-ipv6-topology is empty after deconfiguring peer for the first time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.628937" elapsed="0.000426">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t30" name="Stop_All_Exabgps_2" line="410">
<doc>Save exabgp logs as exaipv6.log, and stop exabgp with ctrl-c bash signal</doc>
<status status="FAIL" start="2026-04-21T00:47:42.629583" elapsed="0.000394">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t31" name="Reconfigure_ODL_To_Accept_Connections_6" line="417">
<doc>Configure BGP peer modules with initiate-connection set to false with short ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.630140" elapsed="0.000466">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t32" name="Start_Exabgp_3" line="433">
<doc>Start exabgp with</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.630778" elapsed="0.000301">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t33" name="Stop_All_Exabgps_3" line="439">
<doc>Save exabgp logs as exabgp_graceful_restart.log, and stop exabgp with ctrl-c bash signal</doc>
<status status="FAIL" start="2026-04-21T00:47:42.631254" elapsed="0.000411">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t34" name="Start_Exabgp_4" line="446">
<doc>Start exabgp with</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.631843" elapsed="0.000310">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t35" name="Delete_Bgp_Peer_Configuration_6" line="452">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.632335" elapsed="0.000465">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s5-t36" name="Stop_All_Exabgps_4" line="468">
<doc>Save exabgp logs as exabgp_graceful_restart.log, and stop exabgp with ctrl-c bash signal</doc>
<status status="FAIL" start="2026-04-21T00:47:42.632980" elapsed="0.000373">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.639801" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.639441" elapsed="0.000389"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.641353" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:42.641523" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:42.641572" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:42.641612" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:42.641651" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.641166" elapsed="0.000778">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.642851" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.642479" elapsed="0.000507">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:42.643096" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:42.643139" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.642135" elapsed="0.001027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.643767" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:42.643335" elapsed="0.000459"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.644993" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.644739" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.645425" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.645188" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.645871" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.645635" elapsed="0.000279"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:42.644235" elapsed="0.001732"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:42.643872" elapsed="0.002130"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.643853" elapsed="0.002174"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.646199" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.646099" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.646065" elapsed="0.000210"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.646423" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.646326" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.646311" elapsed="0.000200"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.647021" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.646654" elapsed="0.000427">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:42.640566" elapsed="0.006673">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:42.647299" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.639989" elapsed="0.007423"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.638801" elapsed="0.008766">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:42.647623" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.634660" elapsed="0.013018"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.634295" elapsed="0.013506">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.634070" elapsed="0.013837">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.648077" elapsed="0.000105"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.648412" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.648340" elapsed="0.000118"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_ExaBgp" owner="ExaBgpLib">
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.649566" level="INFO">${output} = None</msg>
<msg time="2026-04-21T00:47:42.649607" level="FAIL">No open connection.</msg>
<var>${output}</var>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.649238" elapsed="0.000676">No open connection.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.650370" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.650118" elapsed="0.000297"/>
</kw>
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.651217" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-21T00:47:42.650898" elapsed="0.000347"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.651583" level="FAIL">No open connection.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.651396" elapsed="0.000432">No open connection.</status>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.650652" elapsed="0.001290">No open connection.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.652296" level="INFO">${output} = None</msg>
<msg time="2026-04-21T00:47:42.652337" level="FAIL">No open connection.</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.652129" elapsed="0.000451">No open connection.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.653028" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.652769" elapsed="0.000302"/>
</kw>
<kw name="Virtual_Env_Deactivate_On_Current_Session" owner="SSHKeywords">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.653824" level="FAIL">No open connection.</msg>
<arg>deactivate</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.653633" elapsed="0.000436">No open connection.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.654389" level="INFO">${output} = None</msg>
<msg time="2026-04-21T00:47:42.654429" level="FAIL">No open connection.</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.654237" elapsed="0.000406">No open connection.</status>
</kw>
<if>
<branch type="IF" condition="${log_output}==${True}">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.655243" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.654996" elapsed="0.000292"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:42.654742" elapsed="0.000592"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.654715" elapsed="0.000645"/>
</if>
<arg>log_output=${True}</arg>
<doc>Deactivates virtual environment.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.653310" elapsed="0.002163">Several failures occurred:

1) No open connection.

2) No open connection.</status>
</kw>
<doc>Stops the ExaBgp by sending ctrl+c</doc>
<status status="FAIL" start="2026-04-21T00:47:42.649029" elapsed="0.006579">Several failures occurred:

1) No open connection.

2) No open connection.

3) No open connection.

4) No open connection.

5) No open connection.</status>
</kw>
<arg>ExaBgpLib.Stop_ExaBgp</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.648636" elapsed="0.007023"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="FAIL" start="2026-04-21T00:47:42.633815" elapsed="0.021936">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Functional test for ipv6 connection with bgp.

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 tests simple connection between one ibgp peer (exabgp) and Odl.
Peer is configured with ipv6, and exabgp connectes to odl via ipv6.
Exabgp sends one ipv6 unicast route, which presence is verified in
example-ipv6-topology. Tests this connection multiple times, with
different ipv6 accepted formats, e.g. (::1, 0:0:0:0:0:0:0:1, full text)
This suite also tests a combination of afi-safis on odl and exabgp.
ipv6 route injection is carried out from odl to the ibgp peer without
ipv6 family enabled on the peer device and checked for exceptions</doc>
<status status="FAIL" start="2026-04-21T00:47:42.485590" elapsed="0.170257">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</suite>
<suite id="s1-s6" name="Bgp Llgr Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/bgp_llgr_basic.robot">
<kw name="Start_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-21T00:47:42.744872" 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-21T00:47:42.740676" elapsed="0.004243"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:42.740421" elapsed="0.004560"/>
</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-21T00:47:42.749705" 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-21T00:47:42.746039" elapsed="0.003694"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.749922" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.749811" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.749790" elapsed="0.000196"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.750513" 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-21T00:47:42.750144" elapsed="0.000413"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.751028" 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-21T00:47:42.750718" elapsed="0.000336"/>
</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-21T00:47:42.751567" elapsed="0.000282"/>
</kw>
<msg time="2026-04-21T00:47:42.751944" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.751990" 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-21T00:47:42.751215" elapsed="0.000807"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.752580" 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-21T00:47:42.752186" elapsed="0.000420"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.753590" 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-21T00:47:42.753309" elapsed="0.000307"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.754018" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.753764" elapsed="0.000280"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.754486" 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-21T00:47:42.754198" elapsed="0.000330"/>
</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-21T00:47:42.758071" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.757881" elapsed="0.000263"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.754583" elapsed="0.003589"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.758749" 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-21T00:47:42.758330" elapsed="0.000462"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.759352" 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-21T00:47:42.758954" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.759970" 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-21T00:47:42.759570" elapsed="0.000442"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.752864" elapsed="0.007206"/>
</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-21T00:47:42.745704" elapsed="0.014421"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.760299" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.760188" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.760170" elapsed="0.000196"/>
</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-21T00:47:42.763398" 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-21T00:47:42.763023" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.763943" 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-21T00:47:42.763652" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.764015" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:42.764172" 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-21T00:47:42.762703" elapsed="0.001494"/>
</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-21T00:47:42.764550" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.764357" elapsed="0.000253"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.764248" elapsed="0.000388"/>
</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-21T00:47:42.760599" elapsed="0.004091"/>
</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-21T00:47:42.764841" 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-21T00:47:42.765356" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.765220" elapsed="0.000201"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.765102" elapsed="0.000345"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:42.745255" elapsed="0.020260"/>
</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-21T00:47:42.768129" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.768019" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.768000" elapsed="0.000199"/>
</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-21T00:47:42.772928" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.772814" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.772796" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.773942" 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-21T00:47:42.773563" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.774414" 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-21T00:47:42.774128" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.774486" elapsed="0.000044"/>
</return>
<msg time="2026-04-21T00:47:42.774656" 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-21T00:47:42.773218" elapsed="0.001463"/>
</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-21T00:47:42.775020" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.775273" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.775128" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.775111" elapsed="0.000274"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.774879" elapsed="0.000532"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.774732" elapsed="0.000704"/>
</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-21T00:47:42.772527" elapsed="0.002976"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:42.766081" elapsed="0.009481"/>
</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-21T00:47:42.765670" elapsed="0.009934"/>
</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-21T00:47:42.740114" elapsed="0.035538"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.776168" level="INFO">${tools_system_conn_id} = 1</msg>
<var>${tools_system_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.775803" elapsed="0.000393"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.776737" level="INFO">${tools_system_conn_id} = 1</msg>
<arg>${tools_system_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.776397" elapsed="0.000383"/>
</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-21T00:47:42.778433" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.778527" 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-21T00:47:42.778161" elapsed="0.000391"/>
</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-21T00:47:42.778709" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.780131" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.780376" 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-21T00:47:42.779811" elapsed="0.001017">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.780886" 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-21T00:47:42.779419" elapsed="0.001514"/>
</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-21T00:47:42.777728" elapsed="0.003307">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.781083" 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-21T00:47:42.777329" elapsed="0.003796"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.776974" elapsed="0.004239">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.781376" elapsed="0.000022"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads gobgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.781609" elapsed="0.000023"/>
</kw>
<kw name="Download_Gobgp_Binary">
<doc>Downloads gobgp binary and untar the binary zip file</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.781759" elapsed="0.000022"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.739837" elapsed="0.042024">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s6-t1" name="Reconfigure_ODL_To_Accept_Connections" line="40">
<doc>Configure BGP peer modules with initiate-connection set to false with short ipv6 address.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.781919" elapsed="0.000470">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s6-t2" name="Start_Gobgp" line="56">
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.782603" elapsed="0.000279">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s6-t3" name="Delete_Bgp_Peer_Configuration" line="61">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.783043" elapsed="0.000379">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s6-t4" name="Stop_All_Gobgps" line="74">
<doc>Save exabgp logs as exaipv6.log, and stop exabgp with ctrl-c bash signal</doc>
<status status="FAIL" start="2026-04-21T00:47:42.783607" elapsed="0.000338">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.784516" elapsed="0.000103"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.784834" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.784763" elapsed="0.000118"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_GoBgp" owner="GoBgpLib">
<kw name="Read" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.785793" level="INFO">${output} = None</msg>
<msg time="2026-04-21T00:47:42.785834" level="FAIL">No open connection.</msg>
<var>${output}</var>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.785640" elapsed="0.000405">No open connection.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.786463" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.786212" elapsed="0.000314"/>
</kw>
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.787260" level="INFO">${ctrl_c} = </msg>
<var>${ctrl_c}</var>
<arg>chr(int(3))</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-21T00:47:42.786953" elapsed="0.000335"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.787626" level="FAIL">No open connection.</msg>
<arg>${ctrl_c}</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.787438" elapsed="0.000426">No open connection.</status>
</kw>
<doc>Construct ctrl+c character and SSH-write it (without endline) to the current SSH connection.
Do not read anything yet.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.786742" elapsed="0.001236">No open connection.</status>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.788288" level="INFO">${output} = None</msg>
<msg time="2026-04-21T00:47:42.788329" level="FAIL">No open connection.</msg>
<var>${output}</var>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.788138" elapsed="0.000407">No open connection.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.788960" level="INFO">None</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.788711" elapsed="0.000294"/>
</kw>
<doc>Stops the GoBgp by sending ctrl+c</doc>
<status status="FAIL" start="2026-04-21T00:47:42.785418" elapsed="0.003697">Several failures occurred:

1) No open connection.

2) No open connection.

3) No open connection.</status>
</kw>
<arg>GoBgpLib.Stop_GoBgp</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.785027" elapsed="0.004175"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:42.784289" elapsed="0.004964"/>
</kw>
<doc>Functional test for ipv6 connection with bgp.

Copyright (c) 2020 Lumina Networks Intellectual Property. 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 tests simple connection between one ibgp peer (goabgp) and Odl.
Peer is configured with ipv6, and gobgp connectes to odl via ipv6.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.656610" elapsed="0.132671">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s7" name="Bgp App Peer Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/bgp_app_peer_basic.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.877315" 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-21T00:47:42.872934" elapsed="0.004430"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:42.872714" elapsed="0.004711"/>
</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-21T00:47:42.882331" 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-21T00:47:42.878477" elapsed="0.003882"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.882557" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.882438" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.882417" elapsed="0.000210"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.883160" 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-21T00:47:42.882805" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.883702" 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-21T00:47:42.883365" elapsed="0.000364"/>
</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-21T00:47:42.884229" elapsed="0.000293"/>
</kw>
<msg time="2026-04-21T00:47:42.884624" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.884671" 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-21T00:47:42.883893" elapsed="0.000800"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.885232" 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-21T00:47:42.884867" elapsed="0.000391"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.886228" 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-21T00:47:42.885965" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.886686" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.886403" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.887156" 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-21T00:47:42.886868" elapsed="0.000314"/>
</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-21T00:47:42.889973" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.889782" elapsed="0.000263"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.887234" elapsed="0.002839"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.890673" 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-21T00:47:42.890232" elapsed="0.000485"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.891278" 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-21T00:47:42.890881" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.891884" 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-21T00:47:42.891482" elapsed="0.000444"/>
</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-21T00:47:42.885512" elapsed="0.006472"/>
</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-21T00:47:42.878140" elapsed="0.013900"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.892257" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.892143" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.892122" elapsed="0.000203"/>
</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-21T00:47:42.895450" 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-21T00:47:42.895072" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.895944" 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-21T00:47:42.895657" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.896015" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:42.896168" 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-21T00:47:42.894748" elapsed="0.001444"/>
</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-21T00:47:42.896543" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.896350" elapsed="0.000253"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.896242" elapsed="0.000386"/>
</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-21T00:47:42.892559" elapsed="0.004122"/>
</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-21T00:47:42.896833" elapsed="0.000209"/>
</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-21T00:47:42.897348" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.897211" elapsed="0.000201"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.897093" elapsed="0.000344"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:42.877714" elapsed="0.019788"/>
</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-21T00:47:42.900152" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.900043" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.900025" elapsed="0.000195"/>
</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-21T00:47:42.905140" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.905034" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.905016" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.906184" 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-21T00:47:42.905805" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.906695" 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-21T00:47:42.906372" elapsed="0.000349"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:42.906766" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.906918" 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-21T00:47:42.905439" elapsed="0.001503"/>
</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-21T00:47:42.907283" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.907543" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.907380" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.907363" elapsed="0.000257"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.907140" elapsed="0.000503"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.906992" elapsed="0.000675"/>
</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-21T00:47:42.904751" elapsed="0.002968"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:42.898068" elapsed="0.009705"/>
</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-21T00:47:42.897657" elapsed="0.010157"/>
</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-21T00:47:42.872388" elapsed="0.035513"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-21T00:47:42.908051" elapsed="0.000175"/>
</kw>
<kw name="Open_BGP_Peer_Console">
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>alias=bgp_peer_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.908587" elapsed="0.000234"/>
</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-21T00:47:42.910689" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:42.910766" 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-21T00:47:42.910391" elapsed="0.000399"/>
</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-21T00:47:42.910952" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.912140" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:42.912379" 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-21T00:47:42.911824" elapsed="0.001004">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.912885" 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-21T00:47:42.911443" elapsed="0.001490"/>
</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-21T00:47:42.909757" elapsed="0.003278">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:42.913083" 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-21T00:47:42.909347" elapsed="0.003777"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.909020" elapsed="0.004191">OSError: [Errno 16] Device or resource busy</status>
</kw>
<doc>Create a session for BGP peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.908358" elapsed="0.004934">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.913567" elapsed="0.000025"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.913826" elapsed="0.000023"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.914003" elapsed="0.000020"/>
</kw>
<kw name="Open_BGP_Aplication_Peer_Console">
<doc>Create a session for BGP peer.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.914142" elapsed="0.000021"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/bgp_app_peer.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.914307" elapsed="0.000020"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/ipv4-routes-template.xml*</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.914473" elapsed="0.000035"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.914657" elapsed="0.000026"/>
</kw>
<doc>Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
put Python tool to mininet machine, setup imported resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.872111" elapsed="0.042661">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s7-t1" name="Reconfigure_ODL_To_Accept_BGP_Peer_Connection" line="101">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.914832" elapsed="0.000441">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t2" name="Reconfigure_ODL_To_Accept_BGP_Application_Peer" line="120">
<doc>Configure BGP application peer module.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.915448" elapsed="0.000394">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t3" name="Check_For_Empty_Example-IPv4-Topology" line="134">
<doc>Sanity check example-ipv4-topology is up but empty.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.916010" elapsed="0.000372">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t4" name="TC1_BGP_Application_Peer_Post_3_Initial_Routes" line="139">
<doc>Start BGP application peer tool and give it 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.916599" elapsed="0.000418">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t5" name="TC1_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes" line="147">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.917185" elapsed="0.000507">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t6" name="TC1_Connect_BGP_Peer" line="152">
<doc>Start BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.917857" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t7" name="TC1_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes" line="159">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.918347" elapsed="0.000422">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t8" name="TC1_BGP_Application_Peer_Delete_3_Initial_Routes" line="175">
<doc>Start BGP application peer tool and give him 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.918971" elapsed="0.000393">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t9" name="TC1_Check_Example-IPv4-Topology_Is_Empty" line="183">
<doc>See new routes are deleted.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.919552" elapsed="0.000343">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t10" name="TC1_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes" line="188">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.920060" elapsed="0.000386">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t11" name="TC1_Stop_BGP_Peer" line="204">
<doc>Stop BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.920634" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t12" name="TC2_Reconnect_BGP_Peer" line="211">
<doc>Start BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.921102" elapsed="0.000304">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t13" name="TC2_BGP_Application_Peer_Put_3_Routes" line="220">
<doc>Start BGP application peer tool and give him 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.921635" elapsed="0.000371">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t14" name="TC2_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes" line="228">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.922171" elapsed="0.000470">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t15" name="TC2_BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes" line="233">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.922807" elapsed="0.000395">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t16" name="TC2_BGP_Application_Peer_Delete_All_Routes" line="249">
<doc>Start BGP application peer tool and give him 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.923401" elapsed="0.000394">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t17" name="TC2_Check_Example-IPv4-Topology_Is_Empty" line="257">
<doc>See new routes are deleted.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.923960" elapsed="0.000341">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t18" name="TC2_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes" line="262">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.924470" elapsed="0.000414">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t19" name="TC2_Stop_BGP_Peer" line="278">
<doc>Stop BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.925067" elapsed="0.000298">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t20" name="TC3_BGP_Application_Peer_Put_3_Routes" line="285">
<doc>Start BGP application peer tool and give him 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.925626" elapsed="0.000374">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t21" name="TC3_Check_Example-IPv4-Topology_Is_Filled_With_3_Routes" line="293">
<doc>See new routes in example-ipv4-topology as a proof that synchronization was correct.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.926166" elapsed="0.000473">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t22" name="TC3_Reconnect_BGP_Peer_And_Check_Incomming_Updates_For_3_Introduced_Prefixes" line="298">
<doc>Start BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.926804" elapsed="0.000368">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t23" name="TC3_BGP_Application_Peer_Delete_All_Routes" line="317">
<doc>Start BGP application peer tool and give him 30s</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.927371" elapsed="0.000660">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t24" name="TC3_Check_Example-IPv4-Topology_Is_Empty" line="325">
<doc>See new routes are deleted.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.928202" elapsed="0.000354">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t25" name="TC3_BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes" line="330">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.928723" elapsed="0.000417">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t26" name="TC3_Stop_BGP_Peer" line="346">
<doc>Stop BGP peer tool</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.929304" elapsed="0.000325">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t27" name="Delete_Bgp_Peer_Configuration" line="353">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.929797" elapsed="0.000398">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s7-t28" name="Delete_Bgp_Application_Peer_Configuration" line="366">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:42.930363" elapsed="0.000443">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.932195" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:42.932311" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:42.932350" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.932062" elapsed="0.000599">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:42.932733" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:42.932932" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.931793" elapsed="0.001166">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.933419" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.933165" elapsed="0.000298"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.934368" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:42.934410" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.934017" elapsed="0.000532">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.934746" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.934634" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.934615" elapsed="0.000194"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.935124" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:42.935236" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:42.935275" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.934959" elapsed="0.000613">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.936001" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.935752" elapsed="0.000293"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.936371" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:42.936511" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:42.936565" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:42.936604" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.936204" elapsed="0.000679">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.933723" elapsed="0.003294">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.931515" elapsed="0.005614">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.938208" level="INFO">Executing command 'ps -elf | egrep python | egrep 'bgp_app_peer.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:42.938319" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:42.938358" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.938075" elapsed="0.000592">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:42.938729" elapsed="0.000028"/>
</return>
<msg time="2026-04-21T00:47:42.938924" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.937643" elapsed="0.001308">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.939364" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.939117" elapsed="0.000291"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.940287" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:42.940328" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.939950" elapsed="0.000557">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.940716" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.940597" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.940574" elapsed="0.000204"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.941091" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:42.941199" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:42.941237" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.940927" elapsed="0.000607">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.941961" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.941708" elapsed="0.000297"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:42.942325" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:42.942449" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:42.942506" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:42.942546" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.942162" elapsed="0.000670">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.939654" elapsed="0.003309">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'bgp_app_peer\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.937346" elapsed="0.005727">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.943312" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.943233" elapsed="0.000169"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:42.943570" elapsed="0.000099"/>
</kw>
<doc>Make sure Python tool was killed.
Tear down imported Resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.931227" elapsed="0.012559">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open

5) Connection not open

6) Could not get length of 'None'.

7) Connection not open

8) Connection not open</status>
</kw>
<doc>Basic tests for BGP application peer.

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

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

Test suite performs basic BGP functional test cases for
BGP application peer operations and checks for IP4 topology updates
and updates towards BGP peer as follows:

Test case 1: Initial BGP peer connection with pre-filled topology,
POST and simple DELETE requests used.
BGP_Application_Peer_Post_3_Initial_Routes,
Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
Connect_BGP_Peer,
BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes,
BGP_Application_Peer_Delete_3_Initial_Routes,
Check_Example-IPv4-Topology_Is_Empty,
Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
Stop_BGP_Peer.

Test case 2: PUT and DELETE all routes requests while BGP peer is connected.
Reconnect_BGP_Peer,
BGP_Application_Peer_Put_3_Routes,
Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
BGP_Peer_Check_Incomming_Updates_For_3_Introduced_Prefixes,
BGP_Application_Peer_Delete_All_Routes,
Check_Example-IPv4-Topology_Is_Empty,
BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
Stop_BGP_Peer.

Test case 3: Repeated BGP peer re-connection with pre-filled topology.
BGP_Application_Peer_Put_3_Routes,
Check_Example-IPv4-Topology_Is_Filled_With_3_Routes,
Reconnect_BGP_Peer_And_Check_Incomming_Updates_For_3_Introduced_Prefixes,
BGP_Application_Peer_Delete_All_Routes,
Check_Example-IPv4-Topology_Is_Empty,
BGP_Peer_Check_Incomming_Updates_For_3_Withdrawn_Prefixes,
Stop_BGP_Peer.

Brief description how to configure BGP application peer and
how to use restconf application peer interface:
https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Application_Peer
https://wiki.opendaylight.org/view/BGP_LS_PCEP:Programmer_Guide#BGP</doc>
<status status="FAIL" start="2026-04-21T00:47:42.789864" elapsed="0.154012">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open

5) Connection not open

6) Could not get length of 'None'.

7) Connection not open

8) Connection not open</status>
</suite>
<suite id="s1-s8" name="Ibgp Peers Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/ibgp_peers_basic.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.065165" 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-21T00:47:43.060527" elapsed="0.004687"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.060270" elapsed="0.005008"/>
</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-21T00:47:43.070404" 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-21T00:47:43.066351" elapsed="0.004080"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.070635" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.070526" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.070503" elapsed="0.000197"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.071210" 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-21T00:47:43.070856" elapsed="0.000397"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.071773" 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-21T00:47:43.071418" elapsed="0.000382"/>
</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-21T00:47:43.072312" elapsed="0.000302"/>
</kw>
<msg time="2026-04-21T00:47:43.072711" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.072757" 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-21T00:47:43.071969" elapsed="0.000811"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.073321" 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-21T00:47:43.072950" elapsed="0.000398"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.074417" 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-21T00:47:43.074152" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.074873" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.074613" elapsed="0.000286"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.075351" 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-21T00:47:43.075060" elapsed="0.000318"/>
</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-21T00:47:43.078284" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.078093" elapsed="0.000263"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.075433" elapsed="0.002983"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.079017" 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-21T00:47:43.078609" elapsed="0.000452"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.079687" 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-21T00:47:43.079231" elapsed="0.000501"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.080285" 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-21T00:47:43.079901" elapsed="0.000427"/>
</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-21T00:47:43.073701" elapsed="0.006685"/>
</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-21T00:47:43.065999" elapsed="0.014444"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.080639" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.080524" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.080503" elapsed="0.000203"/>
</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-21T00:47:43.084027" 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-21T00:47:43.083651" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.084522" 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-21T00:47:43.084218" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.084594" elapsed="0.000033"/>
</return>
<msg time="2026-04-21T00:47:43.084751" 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-21T00:47:43.083293" elapsed="0.001482"/>
</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-21T00:47:43.085109" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.084935" elapsed="0.000233"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.084826" elapsed="0.000368"/>
</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-21T00:47:43.080923" elapsed="0.004323"/>
</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-21T00:47:43.085400" elapsed="0.000228"/>
</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-21T00:47:43.085937" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.085797" elapsed="0.000204"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.085679" elapsed="0.000347"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.065570" elapsed="0.020508"/>
</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-21T00:47:43.088879" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.088769" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.088751" elapsed="0.000201"/>
</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-21T00:47:43.094145" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.094039" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.094021" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.095179" 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-21T00:47:43.094799" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.095708" 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-21T00:47:43.095386" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.095779" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.095931" 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-21T00:47:43.094436" elapsed="0.001519"/>
</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-21T00:47:43.096337" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.096599" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.096435" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.096417" elapsed="0.000259"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.096191" elapsed="0.000508"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.096041" elapsed="0.000683"/>
</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-21T00:47:43.093756" elapsed="0.003020"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.086663" elapsed="0.010169"/>
</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-21T00:47:43.086232" elapsed="0.010641"/>
</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-21T00:47:43.059948" elapsed="0.036973"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-21T00:47:43.097070" elapsed="0.000174"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${ODL_SYSTEM_IP}</arg>
<arg>alias=bgp_peer1_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.097405" elapsed="0.000263"/>
</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-21T00:47:43.099571" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.099651" 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-21T00:47:43.099071" elapsed="0.000605"/>
</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-21T00:47:43.099841" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.101036" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.101301" 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-21T00:47:43.100713" elapsed="0.001061">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.101831" 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-21T00:47:43.100335" elapsed="0.001545"/>
</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-21T00:47:43.098630" elapsed="0.003356">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.102032" 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-21T00:47:43.098212" elapsed="0.003862"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.097872" elapsed="0.004288">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${ODL_SYSTEM_IP}</arg>
<arg>alias=bgp_peer2_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.102325" elapsed="0.000022"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.102582" elapsed="0.000028"/>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.102849" elapsed="0.000024"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.103104" elapsed="0.000023"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.103282" elapsed="0.000020"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.103454" elapsed="0.000020"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.103827" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.104175" elapsed="0.000024"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.104537" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
prepare directories for responses, put Python tool to mininet machine, setup imported resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.059655" elapsed="0.045027">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s8-t1" name="TC1_Configure_Two_iBGP_Route_Reflector_Client_Peers" line="84">
<doc>Configure two iBGP peers as routing reflector clients.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.104745" elapsed="0.000462">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t2" name="TC1_Connect_BGP_Peer1" line="122">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.105391" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t3" name="TC1_Connect_BGP_Peer2" line="134">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.105896" elapsed="0.000303">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t4" name="TC1_BGP_Peer1_Check_Log_For_Introduced_Prefixes" line="146">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.106380" elapsed="0.000418">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t5" name="TC1_BGP_Peer2_Check_Log_For_Introduced_Prefixes" line="163">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.106972" elapsed="0.000380">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t6" name="TC1_Disconnect_BGP_Peer1" line="180">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.107541" elapsed="0.000318">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t7" name="TC1_BGP_Peer2_Check_Log_For_Withdrawn_Prefixes" line="187">
<doc>Check incomming updates for withdrawn routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.108026" elapsed="0.000386">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t8" name="TC1_Disconnect_BGP_Peer2" line="203">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.108595" elapsed="0.000314">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t9" name="TC_1_Check_for_Empty_IPv4_Topology" line="210">
<status status="FAIL" start="2026-04-21T00:47:43.109091" elapsed="0.000304">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t10" name="TC1_Delete_BGP_Peers_Configuration" line="218">
<doc>Delete all previously configured BGP peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.109585" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t11" name="TC2_Configure_One_iBGP_Route_Reflector_Client_And_One_iBGP_Non_Client" line="240">
<doc>Configure iBGP peers: 1st one as RR client, 2nd one as RR non-client.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.110140" elapsed="0.000521">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t12" name="TC2_Connect_BGP_Peer1" line="278">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.110834" elapsed="0.000301">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t13" name="TC2_Connect_BGP_Peer2" line="290">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.111305" elapsed="0.000315">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t14" name="TC2_BGP_Peer1_Check_Log_For_Introduced_Prefixes" line="302">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.111785" elapsed="0.000368">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t15" name="TC2_BGP_Peer2_Check_Log_For_Introduced_Prefixes" line="319">
<doc>Check incomming updates for new routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.112323" elapsed="0.000388">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t16" name="TC2_Disconnect_BGP_Peer1" line="336">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.112880" elapsed="0.000308">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t17" name="TC2_BGP_Peer2_Check_Log_For_Withdrawn_Prefixes" line="343">
<doc>Check incomming updates for withdrawn routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.113354" elapsed="0.000397">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t18" name="TC2_Disconnect_BGP_Peer2" line="359">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.113921" elapsed="0.000333">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t19" name="TC_2_Check_for_Empty_IPv4_Topology" line="366">
<status status="FAIL" start="2026-04-21T00:47:43.114422" elapsed="0.000313">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t20" name="TC2_Delete_BGP_Peers_Configuration" line="374">
<doc>Delete all previously configured BGP peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.114899" elapsed="0.000619">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t21" name="TC3_Configure_Two_iBGP_Non_Client_Peers" line="396">
<doc>Configure iBGP peers: 1st one as RR client, 2nd one as RR non-client.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.115695" elapsed="0.000401">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t22" name="TC3_Connect_BGP_Peer1" line="434">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.116270" elapsed="0.000317">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t23" name="TC3_Connect_BGP_Peer2" line="446">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.116759" elapsed="0.000299">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t24" name="TC3_BGP_Peer1_Check_Log_For_No_Updates" line="458">
<doc>Check for no updates received by iBGP peer No. 1</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.117230" elapsed="0.000392">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t25" name="TC3_Disconnect_BGP_Peer1" line="472">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.117794" elapsed="0.000323">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t26" name="TC3_BGP_Peer2_Check_Log_For_No_Updates" line="479">
<doc>Consequent check for no updates received by iBGP peer No. 2</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.118289" elapsed="0.000412">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t27" name="TC3_Disconnect_BGP_Peer2" line="494">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.118900" elapsed="0.000313">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t28" name="TC_3_Check_for_Empty_IPv4_Topology" line="501">
<status status="FAIL" start="2026-04-21T00:47:43.119383" elapsed="0.000303">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t29" name="TC3_Delete_BGP_Peers_Configuration" line="509">
<doc>Delete all previously configured BGP peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.119854" elapsed="0.000351">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t30" name="TC4_Configure_Two_iBGP_RR_Clients_With_Cluster_Id" line="531">
<doc>Configure two iBGP peers as routing reflector clients with cluster-id argument.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.120376" elapsed="0.000454">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t31" name="TC4_Connect_BGP_Peers" line="557">
<doc>Connect BGP peers, each set to send 3 prefixes.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.121018" elapsed="0.000347">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t32" name="TC4_BGP_Peer1_Check_Rib_Out_For_Introduced_Prefixes" line="579">
<doc>Check incomming updates for new routes and respective cluster-ids
on first peer which should contain default-cluster id from global config reflected
from the second peer equal to router-id.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.121554" elapsed="0.000624">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t33" name="TC4_BGP_Peer2_Check_Rib_Out_For_Introduced_Prefixes" line="599">
<doc>Check incomming updates for new routes and respective cluster-ids
in second peer which has local route-reflector-cluster-id</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.122346" elapsed="0.000538">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t34" name="TC4_Disconnect_BGP_Peers" line="618">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.123057" elapsed="0.000311">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t35" name="TC4_Check_for_Empty_IPv4_Topology" line="628">
<doc>Checks for empty topology after</doc>
<status status="FAIL" start="2026-04-21T00:47:43.123553" elapsed="0.000320">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s8-t36" name="TC4_Delete_BGP_Peers_Configuration" line="637">
<doc>Delete all previously configured BGP peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.124043" elapsed="0.000353">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" owner="BgpOperations" type="TEARDOWN">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.125972" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:43.126085" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:43.126124" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.125831" elapsed="0.000595">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:43.126504" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.126703" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.125483" elapsed="0.001246">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.127150" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.126897" elapsed="0.000297"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.128114" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:43.128156" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.127762" elapsed="0.000516">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.128479" elapsed="0.000237"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.128362" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.128343" elapsed="0.000425"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.129091" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:43.129202" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:43.129241" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.128923" elapsed="0.000625">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.129978" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.129728" elapsed="0.000294"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.130353" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:43.130472" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:43.130533" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:43.130572" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.130183" elapsed="0.000668">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.127447" elapsed="0.003537">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.125209" elapsed="0.005894">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.131341" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.131266" elapsed="0.000121"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.131587" elapsed="0.000103"/>
</kw>
<doc>Create and Log the diff between expected and actual responses, make sure Python tool was killed.
Tear down imported Resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.124938" elapsed="0.006861">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<doc>Basic tests for iBGP peers.

Copyright (c) 2015-2018 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

Test suite performs basic iBGP functional test cases for
BGP peers in different roles (iBGP, iBGP RR-client):

Test Case 1: Two iBGP RR-client peers introduce prefixes
Expected result: controller forwards updates towards both peers

Test Case 2: Two iBGP peers: one RR client and one non-client introduces prefixes
Expected result: controller forwards updates towards both peers

Test Case 3: Two iBGP RR non-client peers introduce prefixes
Expected result: controller does not forward any update towards peers

Test Case 4: Two iBGP(play.py) RR-client peers configured, first of them configured
with route-reflector-cluster-id, second inherits it's cluster-id from global config.
Each of them introduces 3 prefixes.
Expected result: controller forwards updates towards both peers and each of their
adj-rib-in contains routes. First peer should contain default cluster-id and
second cluster-id from first peers configuration.

For polices see: https://wiki.opendaylight.org/view/BGP_LS_PCEP:BGP</doc>
<status status="FAIL" start="2026-04-21T00:47:42.944575" elapsed="0.187323">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</suite>
<suite id="s1-s9" name="Ebgp Peers Basic" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/ebgp_peers_basic.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.229370" 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-21T00:47:43.224569" elapsed="0.004849"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.224327" elapsed="0.005153"/>
</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-21T00:47:43.234858" 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-21T00:47:43.230668" elapsed="0.004217"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.235064" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.234961" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.234942" elapsed="0.000185"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.235646" 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-21T00:47:43.235281" elapsed="0.000409"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.236163" 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-21T00:47:43.235856" elapsed="0.000332"/>
</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-21T00:47:43.236707" elapsed="0.000278"/>
</kw>
<msg time="2026-04-21T00:47:43.237079" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.237124" 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-21T00:47:43.236354" elapsed="0.000793"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.237714" 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-21T00:47:43.237314" elapsed="0.000426"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.238714" 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-21T00:47:43.238427" elapsed="0.000313"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.239146" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.238892" elapsed="0.000280"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.239641" 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-21T00:47:43.239330" elapsed="0.000337"/>
</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-21T00:47:43.242605" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.242398" elapsed="0.000281"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.239719" elapsed="0.002986"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.243268" 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-21T00:47:43.242867" elapsed="0.000445"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.243894" 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-21T00:47:43.243479" elapsed="0.000457"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.244558" 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-21T00:47:43.244140" elapsed="0.000463"/>
</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-21T00:47:43.237982" elapsed="0.006679"/>
</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-21T00:47:43.230298" elapsed="0.014419"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.244893" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.244781" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.244763" elapsed="0.000196"/>
</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-21T00:47:43.248263" 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-21T00:47:43.247886" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.248754" 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-21T00:47:43.248451" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.248825" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.248976" 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-21T00:47:43.247558" elapsed="0.001442"/>
</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-21T00:47:43.249343" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.249158" elapsed="0.000245"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.249051" elapsed="0.000377"/>
</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-21T00:47:43.245175" elapsed="0.004330"/>
</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-21T00:47:43.249659" elapsed="0.000208"/>
</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-21T00:47:43.250172" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.250033" elapsed="0.000201"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.249916" elapsed="0.000344"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.229772" elapsed="0.020539"/>
</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-21T00:47:43.253122" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.253015" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.252997" elapsed="0.000214"/>
</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-21T00:47:43.258600" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.258480" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.258462" elapsed="0.000206"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.259607" 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-21T00:47:43.259214" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.260077" 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-21T00:47:43.259794" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.260146" elapsed="0.000028"/>
</return>
<msg time="2026-04-21T00:47:43.260296" 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-21T00:47:43.258889" elapsed="0.001431"/>
</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-21T00:47:43.260676" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.260931" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.260773" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.260756" elapsed="0.000287"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.260532" elapsed="0.000535"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.260371" elapsed="0.000720"/>
</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-21T00:47:43.258197" elapsed="0.002947"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.250891" elapsed="0.010307"/>
</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-21T00:47:43.250464" elapsed="0.010775"/>
</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-21T00:47:43.224019" elapsed="0.037269"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-21T00:47:43.261435" elapsed="0.000204"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${ODL_SYSTEM_IP}</arg>
<arg>alias=ibgp_peer1_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.261796" elapsed="0.000221"/>
</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-21T00:47:43.263857" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.263936" 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-21T00:47:43.263388" elapsed="0.000573"/>
</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-21T00:47:43.264122" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.265338" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.265592" 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-21T00:47:43.265024" elapsed="0.000987">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.266067" 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-21T00:47:43.264638" elapsed="0.001477"/>
</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-21T00:47:43.262957" elapsed="0.003258">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.266261" 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-21T00:47:43.262562" elapsed="0.003739"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.262217" elapsed="0.004171">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${ODL_SYSTEM_IP}</arg>
<arg>alias=ebgp_peer1_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.266566" elapsed="0.000023"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.266787" elapsed="0.000023"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${ODL_SYSTEM_IP}</arg>
<arg>alias=ebgp_peer2_console</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.266957" elapsed="0.000019"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.267165" elapsed="0.000022"/>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.267419" elapsed="0.000023"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.267686" elapsed="0.000023"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.267861" elapsed="0.000020"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.268029" elapsed="0.000019"/>
</kw>
<kw name="Create_Default_Session" owner="TemplatedRequests">
<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="NOT RUN" start="2026-04-21T00:47:43.271838" elapsed="0.000026"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_LOG_LEVEL}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.272207" elapsed="0.000025"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.bgpcep</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.272584" elapsed="0.000024"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set ${ODL_BGP_LOG_LEVEL} org.opendaylight.protocol</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.272934" elapsed="0.000023"/>
</kw>
<doc>Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
prepare directories for responses, put Python tool to mininet machine, setup imported resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.223740" elapsed="0.049339">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s9-t1" name="Configure_BGP_Peers" line="96">
<doc>Configure an iBGP and two eBGP peers</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.273140" elapsed="0.000345">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t2" name="Connect_iBGP_Peer1" line="144">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.273683" elapsed="0.000300">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t3" name="Connect_eBGP_Peer1" line="152">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.274155" elapsed="0.000297">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t4" name="Check_IPv4_Topology_For_First_Path" line="159">
<doc>The IPv4 topology shall contain the route announced by the first eBGP</doc>
<status status="FAIL" start="2026-04-21T00:47:43.274639" elapsed="0.000379">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t5" name="iBGP_Check_Log_For_Introduced_Prefixes" line="171">
<doc>Check incomming updates for introduced routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.275181" elapsed="0.000385">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t6" name="Connect_eBGP_Peer2" line="194">
<doc>Connect BGP peer and check empty topology</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.275739" elapsed="0.000351">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t7" name="Disconnect_eBGP_Peer1" line="201">
<doc>Stop BGP peer, log topology and store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.276263" elapsed="0.000372">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t8" name="Check_IPv4_Topology_For_Second_Path" line="208">
<doc>The IPv4 topology shall contain the route announced by the second eBGP now</doc>
<status status="FAIL" start="2026-04-21T00:47:43.276804" elapsed="0.000384">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t9" name="iBGP_Check_Log_For_Updated_Prefixes" line="220">
<doc>Check incomming updates for updated routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.277350" elapsed="0.000373">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t10" name="Disconnect_eBGP_Peer2" line="244">
<doc>Stop BGP peer, store logs and wait for empty topology</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.277887" elapsed="0.000339">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t11" name="Check_For_Empty_IPv4_Topology" line="251">
<doc>The IPv4 topology shall be empty</doc>
<status status="FAIL" start="2026-04-21T00:47:43.278392" elapsed="0.000325">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t12" name="iBGP_Check_Log_For_Withdrawn_Prefixes" line="261">
<doc>Check incomming updates for withdrawn routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.278877" elapsed="0.000354">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t13" name="Disconnect_iBGP_Peer1" line="275">
<doc>Stop BGP peer, log topology and store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.279401" elapsed="0.000337">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t14" name="Delete_BGP_Peers_Configuration" line="282">
<doc>Delete all previously configured BGP peers.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.279903" elapsed="0.000351">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t15" name="TC_LAS_Reconfigure_Odl_To_Accept_Connection" line="296">
<doc>Configure neighbors. One ibgp and one ebgp neighbor with local-as configured.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.280417" elapsed="0.000436">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t16" name="TC_LAS_Start_iBgp_Speaker_And_Verify_Connected" line="316">
<doc>Verify that peer is present in odl's rib. Peer is configured with local-as.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.281019" elapsed="0.000422">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t17" name="TC_LAS_Start_eBgp_Speaker_And_Verify_Connected" line="328">
<doc>Verify that peer is present in odl's rib. Peer is configured with local-as.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.281622" elapsed="0.000421">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t18" name="TC_LAS_Verify_iBGP_Rib_Out" line="340">
<doc>Verifies iBGP's adj-rib-out output. Expects local-as, and ebgp peer-as presence.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.282213" elapsed="0.000659">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t19" name="TC_LAS_Verify_eBGP_Rib_Out" line="360">
<doc>Verifies eBGP's adj-rib-out output. Expects local-as, and ibgp peer-as presence.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.283047" elapsed="0.000395">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t20" name="TC_LAS_Kill_iBgp_Speaker_After_Talking" line="380">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.283632" elapsed="0.000388">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t21" name="TC_LAS_Kill_eBgp_Speaker_After_Talking" line="390">
<doc>Abort the Python speaker. Also, attempt to stop failing fast.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.284199" elapsed="0.000423">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s9-t22" name="TC_LAS_Delete_Bgp_Peer_Configurations" line="400">
<doc>Delete peer configuration.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.284794" elapsed="0.000317">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" owner="BgpOperations" type="TEARDOWN">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.286567" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:43.286680" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:43.286719" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.286417" elapsed="0.000587">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:43.287067" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:43.287300" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.286149" elapsed="0.001178">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.287760" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.287508" elapsed="0.000297"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.288724" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:43.288765" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.288354" elapsed="0.000535">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.289082" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.288972" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.288954" elapsed="0.000190"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.289458" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:43.289583" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:43.289622" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.289293" elapsed="0.000611">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.290323" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.290076" elapsed="0.000291"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.290705" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:43.290824" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:43.290868" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:43.290906" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.290539" elapsed="0.000651">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.288058" elapsed="0.003269">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.285875" elapsed="0.005564">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.291690" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.291616" elapsed="0.000122"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.291893" elapsed="0.000095"/>
</kw>
<doc>Create and Log the diff between expected and actual responses, make sure Python tool was killed.
Tear down imported Resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.285605" elapsed="0.006489">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<doc>Basic tests for eBGP application peers.

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

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

Test suite performs basic eBGP functional tests:
Two eBGP peers advertise the same group of prefixes (aka BGP HA)
https://wiki.opendaylight.org/view/BGP_LS_PCEP:BGP
Reported bugs:
Bug 4834 - ODL controller announces the same route twice (two eBGP scenario aka HA)
Bug 4835 - Routes not withdrawn when eBGP peers are disconnected (the same prefixes announced)

For versions Fluorine and above, there are test cases:
TC_LAS (test case local AS)
- configuration of ebgp with local-as and ibgp without local-as
- connect bgp speakers (play.py) to both peers and check their connection
- check adj-rib-out on both peers, expecting local-as in as-sequence on both peers.

TODO: Extend testsuite by tests dedicated to path selection algorithm
TODO: Choose keywords used by more than one test suite to be placed in a common place.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.132595" elapsed="0.159576">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</suite>
<suite id="s1-s10" name="010 Bgp Flowspec" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpflowspec/010_bgp_flowspec.robot">
<kw name="Start_Suite" type="SETUP">
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.353883" elapsed="0.000311"/>
</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-21T00:47:43.355836" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.355913" 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-21T00:47:43.355571" elapsed="0.000366"/>
</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-21T00:47:43.356080" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.357241" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.357455" 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-21T00:47:43.356927" elapsed="0.000972">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.357955" 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-21T00:47:43.356573" elapsed="0.001428"/>
</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-21T00:47:43.355138" elapsed="0.002999">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.358185" 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-21T00:47:43.354755" elapsed="0.003473"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.354385" elapsed="0.003930">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.358532" elapsed="0.000026"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.358730" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==3.4.16</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.358921" elapsed="0.000022"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.359076" elapsed="0.000021"/>
</kw>
<kw name="Upload_Config_Files">
<arg>${BGP_VARIABLES_FOLDER}</arg>
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.359276" elapsed="0.000021"/>
</kw>
<doc>Suite setup keyword</doc>
<status status="FAIL" start="2026-04-21T00:47:43.353671" elapsed="0.005708">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s10-t1" name="Check_For_Empty_Topology_Before_Talking" line="41">
<doc>Sanity check bgp-flowspec:flowspec-routes is up but empty.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.359440" elapsed="0.000433">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s10-t2" name="Reconfigure_ODL_To_Accept_Connection" line="46">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.360047" elapsed="0.000380">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s10-t3" name="FlowSpec_Test_1" line="60">
<doc>Testing flowspec values for bgp-flowspec.cfg</doc>
<status status="FAIL" start="2026-04-21T00:47:43.360641" elapsed="0.000298">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s10-t4" name="FlowSpec_Test_2" line="66">
<doc>Testing flowspec values for bgp-flowspec-redirect.cfg</doc>
<status status="FAIL" start="2026-04-21T00:47:43.361133" elapsed="0.000318">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s10-t5" name="Deconfigure_ODL_To_Accept_Connection" line="72">
<doc>Deconfigure BGP peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.361640" elapsed="0.000304">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.362479" elapsed="0.000121"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.362798" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.362730" elapsed="0.000112"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:43.362275" elapsed="0.000617"/>
</kw>
<doc>Functional test for bgp flowspec.

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</doc>
<status status="FAIL" start="2026-04-21T00:47:43.292813" elapsed="0.070107">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s11" name="Ibgp Peer Lsp" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/ibgp_peer_lsp.robot">
<kw name="Setup_Everything" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.450890" 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-21T00:47:43.446471" elapsed="0.004466"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.446229" elapsed="0.004768"/>
</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-21T00:47:43.455922" 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-21T00:47:43.452069" elapsed="0.003881"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.456128" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.456028" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.456007" elapsed="0.000186"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.456726" 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-21T00:47:43.456358" elapsed="0.000411"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.457243" 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-21T00:47:43.456935" elapsed="0.000333"/>
</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-21T00:47:43.457796" elapsed="0.000292"/>
</kw>
<msg time="2026-04-21T00:47:43.458182" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.458228" 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-21T00:47:43.457436" elapsed="0.000815"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.458860" 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-21T00:47:43.458460" elapsed="0.000427"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.459864" 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-21T00:47:43.459599" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.460298" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.460046" elapsed="0.000278"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.460791" 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-21T00:47:43.460486" elapsed="0.000331"/>
</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-21T00:47:43.463584" elapsed="0.000026"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.463378" elapsed="0.000280"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.460868" elapsed="0.002816"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.464246" 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-21T00:47:43.463848" elapsed="0.000442"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.464876" 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-21T00:47:43.464458" elapsed="0.000460"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.465468" 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-21T00:47:43.465086" elapsed="0.000439"/>
</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-21T00:47:43.459130" elapsed="0.006454"/>
</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-21T00:47:43.451729" elapsed="0.013910"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.465836" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.465724" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.465705" elapsed="0.000198"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.469123" 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-21T00:47:43.468744" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.469622" 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-21T00:47:43.469313" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.469694" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.469846" 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-21T00:47:43.468340" elapsed="0.001530"/>
</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-21T00:47:43.470208" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.470029" elapsed="0.000237"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.469921" elapsed="0.000371"/>
</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-21T00:47:43.466124" elapsed="0.004219"/>
</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-21T00:47:43.470514" elapsed="0.000210"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.471040" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.470891" elapsed="0.000214"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.470774" elapsed="0.000357"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.451277" elapsed="0.019906"/>
</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-21T00:47:43.474150" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.474003" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.473985" elapsed="0.000236"/>
</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-21T00:47:43.479204" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.479096" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.479078" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.480223" 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-21T00:47:43.479849" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.480718" 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-21T00:47:43.480415" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.480789" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.480941" 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-21T00:47:43.479514" elapsed="0.001452"/>
</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-21T00:47:43.481342" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.481619" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.481440" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.481423" elapsed="0.000272"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.481192" elapsed="0.000526"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.481017" elapsed="0.000725"/>
</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-21T00:47:43.478810" elapsed="0.002985"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.471851" elapsed="0.009997"/>
</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-21T00:47:43.471339" elapsed="0.010549"/>
</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-21T00:47:43.445920" elapsed="0.036017"/>
</kw>
<kw name="Set Default Configuration" owner="SSHLibrary">
<arg>prompt=${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Update the default `configuration`.</doc>
<status status="PASS" start="2026-04-21T00:47:43.482093" elapsed="0.000174"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${TOOLS_SYSTEM_IP}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.482432" elapsed="0.000203"/>
</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-21T00:47:43.484472" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.484568" 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-21T00:47:43.484020" elapsed="0.000572"/>
</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-21T00:47:43.484759" elapsed="0.000330"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.485974" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.486209" 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-21T00:47:43.485657" elapsed="0.000989">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.486703" 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-21T00:47:43.485266" elapsed="0.001484"/>
</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-21T00:47:43.483584" elapsed="0.003266">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.486896" 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-21T00:47:43.483179" elapsed="0.003759"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.482838" elapsed="0.004186">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Require_Python" owner="SSHKeywords">
<doc>Verify current SSH connection leads to machine with python working. Fatal fail otherwise.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.487279" elapsed="0.000024"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.487560" elapsed="0.000024"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpuser/../../../../tools/fastbgp/play.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.487780" elapsed="0.000021"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.487953" elapsed="0.000020"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.488240" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. SSH-login to mininet machine, create HTTP session,
prepare directories for responses, put Python tool to mininet machine, setup imported resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.445642" elapsed="0.042702">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s11-t1" name="TC1_Configure_iBGP_Peer" line="54">
<doc>Configure BGP peer module with initiate-connection set to false.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.488402" elapsed="0.000407">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t2" name="TC1_Check_Example_Bgp_Rib_Is_Empty" line="73">
<doc>Check RIB for none linkstate-routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.488998" elapsed="0.000343">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t3" name="TC1_Connect_BGP_Peer" line="78">
<doc>Connect BGP peer with advertising the routes without mandatory params like LOC_PREF.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.489539" elapsed="0.000398">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t4" name="TC1_Check_Example_Bgp_Rib" line="87">
<doc>Check RIB for not containig linkstate-route(s), because update messages were not good.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.490108" elapsed="0.000416">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t5" name="TC1_Disconnect_BGP_Peer" line="97">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.490691" elapsed="0.000308">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t6" name="TC1_Deconfigure_iBGP_Peer" line="103">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.491168" elapsed="0.000392">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t7" name="TC2_Configure_iBGP_Peer" line="115">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.491727" elapsed="0.000345">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t8" name="TC2_Check_Example_Bgp_Rib_Is_Empty" line="132">
<doc>Check RIB for none linkstate-routes</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.492234" elapsed="0.000360">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t9" name="TC2_Connect_BGP_Peer" line="137">
<doc>Connect BGP peer</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.492780" elapsed="0.000297">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t10" name="TC2_Check_Example_Bgp_Rib" line="143">
<doc>Check RIB for linkstate-route(s) and check all of their attributes.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.493241" elapsed="0.000394">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t11" name="TC2_Disconnect_BGP_Peer" line="156">
<doc>Stop BGP peer &amp; store logs</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.493812" elapsed="0.000314">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s11-t12" name="TC2_Deconfigure_iBGP_Peer" line="162">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.494288" elapsed="0.000400">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Teardown_Everything" owner="BgpOperations" type="TEARDOWN">
<kw name="Search_And_Kill_Remote_Python" owner="KillPythonTool">
<kw name="Search_For_Remote_Python_Processes" owner="KillPythonTool">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.496146" level="INFO">Executing command 'ps -elf | egrep python | egrep 'play.py' | egrep -v grep'.</msg>
<msg time="2026-04-21T00:47:43.496257" level="INFO">${processes} = None</msg>
<msg time="2026-04-21T00:47:43.496297" level="FAIL">Connection not open</msg>
<var>${processes}</var>
<arg>ps -elf | egrep python | egrep ${filter} | egrep -v grep</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.496013" elapsed="0.000610">Connection not open</status>
</kw>
<return>
<value>${processes}</value>
<status status="PASS" start="2026-04-21T00:47:43.496686" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.496883" level="INFO">${processes} = None</msg>
<var>${processes}</var>
<arg>${filter}</arg>
<doc>Only searches for the list of processes, in case something else than kill has to be done with them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.495730" elapsed="0.001180">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.498231" level="INFO">None</msg>
<arg>${processes}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.497079" elapsed="0.001199"/>
</kw>
<kw name="Kill_Remote_Processes" owner="KillPythonTool">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.499177" level="INFO">${arg_length} = None</msg>
<msg time="2026-04-21T00:47:43.499219" level="FAIL">Could not get length of 'None'.</msg>
<var>${arg_length}</var>
<arg>${pself_lines}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.498833" elapsed="0.000508">Could not get length of 'None'.</status>
</kw>
<if>
<branch type="IF" condition="${arg_length} == 0">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.499552" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.499425" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.499407" elapsed="0.000208"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.499932" level="INFO">Executing command 'echo 'None' | awk '{print "kill -9",$4}''.</msg>
<msg time="2026-04-21T00:47:43.500042" level="INFO">${commands} = None</msg>
<msg time="2026-04-21T00:47:43.500081" level="FAIL">Connection not open</msg>
<var>${commands}</var>
<arg>echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.499767" elapsed="0.000593">Connection not open</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.500825" level="INFO">None</msg>
<arg>${commands}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.500570" elapsed="0.000299"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.501233" level="INFO">Executing command 'echo 'set -exu; None' | sudo sh'.</msg>
<msg time="2026-04-21T00:47:43.501352" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:43.501395" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:43.501432" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>echo 'set -exu; ${commands}' | sudo sh</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.501065" elapsed="0.000664">Connection not open</status>
</kw>
<arg>${processes}</arg>
<doc>Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.498531" elapsed="0.003331">Several failures occurred:

1) Could not get length of 'None'.

2) Connection not open

3) Connection not open</status>
</kw>
<arg>'play\.py'</arg>
<doc>The main keyword. Search for processes, Log the list of them, kill them.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.495423" elapsed="0.006552">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.502212" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.502139" elapsed="0.000119"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.502407" elapsed="0.000110"/>
</kw>
<doc>Create and Log the diff between expected and actual responses, make sure Python tool was killed.
Tear down imported Resources.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.495131" elapsed="0.007493">Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</kw>
<doc>Basic tests for iBGP peers.

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

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

Test suite performs basic iBGP functional test case for
carrying LSP State Information in BGP as described in
http://tools.ietf.org/html/draft-ietf-idr-te-lsp-distribution-03</doc>
<status status="FAIL" start="2026-04-21T00:47:43.363437" elapsed="0.139247">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Could not get length of 'None'.

3) Connection not open

4) Connection not open</status>
</suite>
<suite id="s1-s12" name="010 Bgp Functional L3Vpn" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/010_bgp_functional_l3vpn.robot">
<kw name="Start_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-21T00:47:43.591032" 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-21T00:47:43.586630" elapsed="0.004449"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.586391" elapsed="0.004749"/>
</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-21T00:47:43.596153" 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-21T00:47:43.592210" elapsed="0.003971"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.596358" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.596258" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.596238" elapsed="0.000184"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.596956" 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-21T00:47:43.596600" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.597526" 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-21T00:47:43.597188" 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-21T00:47:43.598061" elapsed="0.000272"/>
</kw>
<msg time="2026-04-21T00:47:43.598428" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.598474" 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-21T00:47:43.597725" elapsed="0.000786"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.599054" 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-21T00:47:43.598690" elapsed="0.000390"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.600051" 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-21T00:47:43.599789" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.600484" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.600231" elapsed="0.000294"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.600984" 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-21T00:47:43.600688" elapsed="0.000321"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.603720" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.603528" elapsed="0.000263"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.601061" elapsed="0.002794"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.604425" 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-21T00:47:43.604025" elapsed="0.000443"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.605062" 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-21T00:47:43.604653" elapsed="0.000452"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.605686" 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-21T00:47:43.605280" elapsed="0.000449"/>
</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-21T00:47:43.599321" elapsed="0.006466"/>
</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-21T00:47:43.591869" elapsed="0.013973"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.606025" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.605912" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.605887" elapsed="0.000206"/>
</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-21T00:47:43.609254" 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-21T00:47:43.608879" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.609760" 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-21T00:47:43.609444" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.609831" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.609985" 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-21T00:47:43.608529" elapsed="0.001480"/>
</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-21T00:47:43.610347" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.610169" elapsed="0.000236"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.610060" elapsed="0.000371"/>
</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-21T00:47:43.606313" elapsed="0.004170"/>
</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-21T00:47:43.610664" elapsed="0.000211"/>
</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-21T00:47:43.611184" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.611041" elapsed="0.000205"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.610924" elapsed="0.000347"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.591418" elapsed="0.019906"/>
</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-21T00:47:43.614031" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.613921" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.613904" elapsed="0.000194"/>
</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-21T00:47:43.619030" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.618924" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.618907" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.620050" 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-21T00:47:43.619675" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.620577" 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-21T00:47:43.620263" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.620647" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.620798" 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-21T00:47:43.619327" elapsed="0.001495"/>
</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-21T00:47:43.621210" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.621462" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.621308" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.621291" elapsed="0.000264"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.621061" elapsed="0.000518"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.620909" elapsed="0.000695"/>
</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-21T00:47:43.618641" elapsed="0.003015"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.611911" elapsed="0.009799"/>
</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-21T00:47:43.611480" elapsed="0.010271"/>
</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-21T00:47:43.586079" elapsed="0.035719"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.622300" level="INFO">${tools_system_conn_id} = 1</msg>
<var>${tools_system_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.621954" elapsed="0.000372"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.622833" level="INFO">${tools_system_conn_id} = 1</msg>
<arg>${tools_system_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:43.622514" elapsed="0.000360"/>
</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-21T00:47:43.624579" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.624656" 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-21T00:47:43.624287" elapsed="0.000393"/>
</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-21T00:47:43.624844" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.626243" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.626465" 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-21T00:47:43.625926" elapsed="0.001000">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.626985" 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-21T00:47:43.625556" elapsed="0.001477"/>
</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-21T00:47:43.623842" elapsed="0.003291">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.627179" 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-21T00:47:43.623438" elapsed="0.003782"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.623076" elapsed="0.004230">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.627539" elapsed="0.000025"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.627754" elapsed="0.000022"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==3.4.16</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.627975" elapsed="0.000029"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.628160" elapsed="0.000020"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files and needed scripts</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.628375" elapsed="0.000021"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.585801" elapsed="0.042700">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s12-t1" name="Configure_App_Peer" line="57">
<doc>Configures bgp application peer. Openconfig is used for carbon and above.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.628560" elapsed="0.000382">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t2" name="Reconfigure_ODL_To_Accept_Connection" line="65">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.629116" elapsed="0.000396">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t3" name="L3vpn_Ipv4_To_Odl" line="80">
<doc>Testing mpls vpn ipv4 routes reported to odl from exabgp</doc>
<status status="FAIL" start="2026-04-21T00:47:43.629683" elapsed="0.000324">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t4" name="Start_Play" line="86">
<doc>Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.630207" elapsed="0.000611">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t5" name="Play_To_Odl_rt_constrain_type_0" line="94">
<doc>This keyword sends route-target route containg route-target argument so odl
can identify this peer as appropriate for advertizement when it recieves such route.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.630985" elapsed="0.000528">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t6" name="Odl_To_Play_l3vpn_rt_arg" line="99">
<doc>Same as TC before but fluorine and further this l3vpn route also needs to contain route-target argument.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.631679" elapsed="0.000435">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t7" name="Kill_Talking_BGP_Speaker" line="103">
<doc>Abort the Python speaker</doc>
<status status="FAIL" start="2026-04-21T00:47:43.632293" elapsed="0.000323">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t8" name="Delete_Bgp_Peer_Configuration" line="109">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.632783" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s12-t9" name="Deconfigure_App_Peer" line="117">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:43.633327" elapsed="0.000376">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.639975" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:43.639648" elapsed="0.000355"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.641427" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:43.641574" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:43.641618" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:43.641658" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:43.641696" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.641250" elapsed="0.000738">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.642871" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.642543" elapsed="0.000452">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:43.643099" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:43.643142" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:43.642185" elapsed="0.000979"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.643843" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:43.643344" elapsed="0.000526"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.644902" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.644658" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.645339" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.645104" elapsed="0.000278"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.645795" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.645556" elapsed="0.000282"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:43.644287" elapsed="0.001605"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:43.643948" elapsed="0.001978"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.643929" elapsed="0.002022"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.646105" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.646006" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.645989" elapsed="0.000181"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.646308" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.646221" elapsed="0.000128"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.646206" elapsed="0.000165"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.646885" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.646531" elapsed="0.000420">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:43.640704" elapsed="0.006372">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:43.647164" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.640167" elapsed="0.007056"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.639018" elapsed="0.008330">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:43.647400" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.634916" elapsed="0.012541"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.634564" elapsed="0.013033">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.634313" elapsed="0.013387">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.647865" elapsed="0.000098"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.648187" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.648112" elapsed="0.000120"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="FAIL" start="2026-04-21T00:47:43.634056" elapsed="0.014271">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Functional test suite for bgp - l3vpn-ipv4

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 tests advertising and receiveing routes with l3vpn content.
It uses odl and exabgp as bgp peers. Routes advertized from odl
are configured via application peer. Routes advertised from exabgp is
statically configured in exabgp config file.

For fluorine and further, instead of exabgp, play.py is used. When sending
routes from odl to peer, first route containg route-target argument have to
be send from peer to odl, so odl can identify this peer. Than it sends l3vpn
route containg this argument to odl app peer, and we check that app peer
advertizes this route back to the peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.503242" elapsed="0.145140">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</suite>
<suite id="s1-s13" name="030 Bgp Functional Evpn" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/030_bgp_functional_evpn.robot">
<kw name="Start_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-21T00:47:43.733833" 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-21T00:47:43.729587" elapsed="0.004293"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.729350" elapsed="0.004592"/>
</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-21T00:47:43.738698" 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-21T00:47:43.734999" elapsed="0.003727"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.738903" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.738802" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.738782" elapsed="0.000184"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.739476" 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-21T00:47:43.739126" elapsed="0.000409"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.740018" 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-21T00:47:43.739699" elapsed="0.000345"/>
</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-21T00:47:43.740570" elapsed="0.000275"/>
</kw>
<msg time="2026-04-21T00:47:43.740938" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.740984" 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-21T00:47:43.740209" elapsed="0.000798"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.741558" 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-21T00:47:43.741179" elapsed="0.000410"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.742551" 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-21T00:47:43.742274" elapsed="0.000304"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.743026" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.742731" elapsed="0.000322"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.743519" 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-21T00:47:43.743215" elapsed="0.000331"/>
</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-21T00:47:43.746207" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.746020" elapsed="0.000259"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.743598" elapsed="0.002709"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.746888" 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-21T00:47:43.746466" elapsed="0.000466"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.747545" 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-21T00:47:43.747124" elapsed="0.000464"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.748152" 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-21T00:47:43.747773" elapsed="0.000421"/>
</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-21T00:47:43.741827" elapsed="0.006425"/>
</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-21T00:47:43.734662" elapsed="0.013644"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.748500" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.748371" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.748352" elapsed="0.000217"/>
</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-21T00:47:43.751652" 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-21T00:47:43.751248" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.752129" 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-21T00:47:43.751843" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.752201" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:43.752355" 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-21T00:47:43.750923" elapsed="0.001456"/>
</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-21T00:47:43.752730" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.752555" elapsed="0.000240"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.752430" elapsed="0.000391"/>
</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-21T00:47:43.748789" elapsed="0.004084"/>
</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-21T00:47:43.753025" elapsed="0.000216"/>
</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-21T00:47:43.753564" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.753407" elapsed="0.000223"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.753291" elapsed="0.000364"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.734219" elapsed="0.019487"/>
</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-21T00:47:43.756618" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.756486" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.756461" elapsed="0.000225"/>
</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-21T00:47:43.761541" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.761420" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.761403" elapsed="0.000205"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.762610" 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-21T00:47:43.762154" elapsed="0.000484"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.763105" 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-21T00:47:43.762810" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.763185" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:43.763336" 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-21T00:47:43.761828" elapsed="0.001533"/>
</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-21T00:47:43.763731" 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-21T00:47:43.763976" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.763828" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.763811" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.763585" elapsed="0.000488"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.763411" elapsed="0.000686"/>
</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-21T00:47:43.761139" elapsed="0.003009"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.754276" elapsed="0.009924"/>
</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-21T00:47:43.753858" elapsed="0.010388"/>
</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-21T00:47:43.729043" elapsed="0.035251"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.764823" level="INFO">${mininet_conn_id} = 1</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.764452" elapsed="0.000398"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.765328" level="INFO">${mininet_conn_id} = 1</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-21T00:47:43.765018" elapsed="0.000351"/>
</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-21T00:47:43.767235" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.767314" 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-21T00:47:43.766764" elapsed="0.000573"/>
</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-21T00:47:43.767533" elapsed="0.000330"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.768735" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.768972" 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-21T00:47:43.768399" elapsed="0.001024">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.769479" 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-21T00:47:43.768035" elapsed="0.001508"/>
</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-21T00:47:43.766316" elapsed="0.003329">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.769692" 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-21T00:47:43.765933" elapsed="0.003800"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.765580" elapsed="0.004238">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.769985" elapsed="0.000021"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>${PLAY_SCRIPT}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.770164" elapsed="0.000020"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.770426" elapsed="0.000024"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${EVPN_CONF_URL}</arg>
<arg>/rests/data/bgp-rib:application-rib=${ODL_SYSTEM_IP}/tables=odl-bgp-evpn%3Al2vpn-address-family,odl-bgp-evpn%3Aevpn-subsequent-address-family/odl-bgp-evpn:evpn-routes</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.770631" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${EVPN_LOC_RIB}</arg>
<arg>/rests/data/bgp-rib:bgp-rib/rib=${RIB_NAME}/loc-rib/tables=odl-bgp-evpn%3Al2vpn-address-family,odl-bgp-evpn%3Aevpn-subsequent-address-family/odl-bgp-evpn:evpn-routes?content=nonconfig</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.770848" elapsed="0.000039"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${EVPN_FAMILY_LOC_RIB}</arg>
<arg>/rests/data/bgp-rib:bgp-rib/rib=${RIB_NAME}/loc-rib/tables=odl-bgp-evpn%3Al2vpn-address-family,odl-bgp-evpn%3Aevpn-subsequent-address-family?content=nonconfig</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.771048" elapsed="0.000020"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${EMPTY_ROUTES}</var>
<arg>${EVPN_DIR}/empty_routes</arg>
<arg>empty_routes.json</arg>
<doc>Check if ${folder}.vanadium/${file_name} exists. If yes read and Log contents of file ${folder}.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default ${folder}/${file_name}.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.793240" elapsed="0.000028"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${EMPTY_ROUTES}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.793442" elapsed="0.000020"/>
</kw>
<doc>Initialize SetupUtils. Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.728764" elapsed="0.064799">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s13-t1" name="Configure_App_Peer" line="48">
<doc>Configures bgp application peer. Openconfig is used for carbon and above.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.793621" elapsed="0.000387">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t2" name="Reconfigure_ODL_To_Accept_Connection" line="54">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.794205" elapsed="0.000402">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t3" name="Start_Bgp_Peer" line="66">
<doc>Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.794775" elapsed="0.000591">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t4" name="Odl_To_Play_route_es_arb" line="71">
<status status="FAIL" start="2026-04-21T00:47:43.795549" elapsed="0.000266">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t5" name="Play_To_Odl_route_es_arb" line="73">
<status status="FAIL" start="2026-04-21T00:47:43.795972" elapsed="0.000259">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t6" name="Odl_To_Play_route_es_as" line="76">
<status status="FAIL" start="2026-04-21T00:47:43.796395" elapsed="0.000279">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t7" name="Play_To_Odl_route_es_as" line="78">
<status status="FAIL" start="2026-04-21T00:47:43.796836" elapsed="0.000264">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t8" name="Odl_To_Play_route_es_lacp" line="81">
<status status="FAIL" start="2026-04-21T00:47:43.797263" elapsed="0.000280">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t9" name="Play_To_Odl_route_es_lacp" line="83">
<status status="FAIL" start="2026-04-21T00:47:43.797706" elapsed="0.000276">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t10" name="Odl_To_Play_route_es_lan" line="86">
<status status="FAIL" start="2026-04-21T00:47:43.798139" elapsed="0.000277">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t11" name="Play_To_Odl_route_es_lan" line="88">
<status status="FAIL" start="2026-04-21T00:47:43.798600" elapsed="0.000274">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t12" name="Odl_To_Play_route_es_mac" line="91">
<status status="FAIL" start="2026-04-21T00:47:43.799035" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t13" name="Play_To_Odl_route_es_mac" line="93">
<status status="FAIL" start="2026-04-21T00:47:43.799463" elapsed="0.000299">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t14" name="Odl_To_Play_route_es_rou" line="96">
<status status="FAIL" start="2026-04-21T00:47:43.799924" elapsed="0.000278">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t15" name="Play_To_Odl_route_es_rou" line="98">
<status status="FAIL" start="2026-04-21T00:47:43.800363" elapsed="0.000304">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t16" name="Odl_To_Play_route_eth_arb" line="101">
<status status="FAIL" start="2026-04-21T00:47:43.800829" elapsed="0.000274">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t17" name="Play_To_Odl_route_eth_arb" line="103">
<status status="FAIL" start="2026-04-21T00:47:43.801264" elapsed="0.000296">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t18" name="Odl_To_Play_route_eth_as" line="106">
<status status="FAIL" start="2026-04-21T00:47:43.801723" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t19" name="Play_To_Odl_route_eth_as" line="108">
<status status="FAIL" start="2026-04-21T00:47:43.802167" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t20" name="Odl_To_Play_route_eth_lacp" line="111">
<status status="FAIL" start="2026-04-21T00:47:43.802626" elapsed="0.000286">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t21" name="Play_To_Odl_route_eth_lacp" line="113">
<status status="FAIL" start="2026-04-21T00:47:43.803073" elapsed="0.000275">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t22" name="Odl_To_Play_route_eth_lacp_extdef" line="116">
<status status="FAIL" start="2026-04-21T00:47:43.803522" elapsed="0.000300">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t23" name="Play_To_Odl_route_eth_lacp_extdef" line="118">
<status status="FAIL" start="2026-04-21T00:47:43.803988" elapsed="0.000293">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t24" name="Odl_To_Play_route_eth_lacp_extesilab" line="121">
<status status="FAIL" start="2026-04-21T00:47:43.804442" elapsed="0.000308">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t25" name="Play_To_Odl_route_eth_lacp_extesilab" line="123">
<status status="FAIL" start="2026-04-21T00:47:43.804912" elapsed="0.000296">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t26" name="Odl_To_Play_route_eth_lacp_extesr" line="126">
<status status="FAIL" start="2026-04-21T00:47:43.805369" elapsed="0.001514">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t27" name="Play_To_Odl_route_eth_lacp_extesr" line="128">
<status status="FAIL" start="2026-04-21T00:47:43.807060" elapsed="0.000286">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t28" name="Odl_To_Play_route_eth_lacp_extl2" line="131">
<status status="FAIL" start="2026-04-21T00:47:43.807526" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t29" name="Play_To_Odl_route_eth_lacp_extl2" line="133">
<status status="FAIL" start="2026-04-21T00:47:43.807969" elapsed="0.000279">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t30" name="Odl_To_Play_route_eth_lacp_extmac" line="136">
<status status="FAIL" start="2026-04-21T00:47:43.808411" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t31" name="Play_To_Odl_route_eth_lacp_extmac" line="138">
<status status="FAIL" start="2026-04-21T00:47:43.808867" elapsed="0.000280">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t32" name="Odl_To_Play_route_eth_lan" line="141">
<status status="FAIL" start="2026-04-21T00:47:43.809310" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t33" name="Play_To_Odl_route_eth_lan" line="143">
<status status="FAIL" start="2026-04-21T00:47:43.809771" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t34" name="Odl_To_Play_route_eth_mac" line="146">
<status status="FAIL" start="2026-04-21T00:47:43.810200" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t35" name="Play_To_Odl_route_eth_mac" line="148">
<status status="FAIL" start="2026-04-21T00:47:43.810644" elapsed="0.000265">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t36" name="Odl_To_Play_route_eth_rou" line="151">
<status status="FAIL" start="2026-04-21T00:47:43.811070" elapsed="0.000264">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t37" name="Play_To_Odl_route_eth_rou" line="153">
<status status="FAIL" start="2026-04-21T00:47:43.811511" elapsed="0.000271">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t38" name="Odl_To_Play_route_inc_arb" line="156">
<status status="FAIL" start="2026-04-21T00:47:43.811946" elapsed="0.000269">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t39" name="Play_To_Odl_route_inc_arb" line="158">
<status status="FAIL" start="2026-04-21T00:47:43.812378" elapsed="0.000283">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t40" name="Odl_To_Play_route_inc_as" line="161">
<status status="FAIL" start="2026-04-21T00:47:43.812821" elapsed="0.000265">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t41" name="Play_To_Odl_route_inc_as" line="163">
<status status="FAIL" start="2026-04-21T00:47:43.813249" elapsed="0.000304">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t42" name="Odl_To_Play_route_inc_lacp" line="166">
<status status="FAIL" start="2026-04-21T00:47:43.813717" elapsed="0.000271">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t43" name="Play_To_Odl_route_inc_lacp" line="168">
<status status="FAIL" start="2026-04-21T00:47:43.814151" elapsed="0.000275">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t44" name="Odl_To_Play_route_inc_lan" line="171">
<status status="FAIL" start="2026-04-21T00:47:43.814606" elapsed="0.000269">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t45" name="Play_To_Odl_route_inc_lan" line="173">
<status status="FAIL" start="2026-04-21T00:47:43.815038" elapsed="0.000268">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t46" name="Odl_To_Play_route_inc_mac" line="176">
<status status="FAIL" start="2026-04-21T00:47:43.815468" elapsed="0.000287">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t47" name="Play_To_Odl_route_inc_mac" line="178">
<status status="FAIL" start="2026-04-21T00:47:43.815919" elapsed="0.000268">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t48" name="Odl_To_Play_route_inc_rou" line="181">
<status status="FAIL" start="2026-04-21T00:47:43.816351" elapsed="0.000286">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t49" name="Play_To_Odl_route_inc_rou" line="183">
<status status="FAIL" start="2026-04-21T00:47:43.816801" elapsed="0.000278">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t50" name="Odl_To_Play_route_mac_arb" line="186">
<status status="FAIL" start="2026-04-21T00:47:43.817239" elapsed="0.000324">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t51" name="Play_To_Odl_route_mac_arb" line="188">
<status status="FAIL" start="2026-04-21T00:47:43.817728" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t52" name="Odl_To_Play_route_mac_as" line="191">
<status status="FAIL" start="2026-04-21T00:47:43.818157" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t53" name="Play_To_Odl_route_mac_as" line="193">
<status status="FAIL" start="2026-04-21T00:47:43.818611" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t54" name="Odl_To_Play_route_mac_lacp" line="196">
<status status="FAIL" start="2026-04-21T00:47:43.819046" elapsed="0.000269">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t55" name="Play_To_Odl_route_mac_lacp" line="198">
<status status="FAIL" start="2026-04-21T00:47:43.819476" elapsed="0.000287">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t56" name="Odl_To_Play_route_mac_lan" line="201">
<status status="FAIL" start="2026-04-21T00:47:43.819926" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t57" name="Play_To_Odl_route_mac_lan" line="203">
<status status="FAIL" start="2026-04-21T00:47:43.820352" elapsed="0.000292">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t58" name="Odl_To_Play_route_mac_mac" line="206">
<status status="FAIL" start="2026-04-21T00:47:43.820810" elapsed="0.000268">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t59" name="Play_To_Odl_route_mac_mac" line="208">
<status status="FAIL" start="2026-04-21T00:47:43.821250" elapsed="0.000296">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t60" name="Odl_To_Play_route_mac_rou" line="211">
<status status="FAIL" start="2026-04-21T00:47:43.821711" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t61" name="Play_To_Odl_route_mac_rou" line="213">
<status status="FAIL" start="2026-04-21T00:47:43.822143" elapsed="0.000265">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t62" name="Odl_To_Play_pmsi_rsvp_te_p2mp_lsp" line="216">
<status status="FAIL" start="2026-04-21T00:47:43.822613" elapsed="0.000285">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t63" name="Play_To_Odl_pmsi_rsvp_te_p2mp_lsp" line="219">
<status status="FAIL" start="2026-04-21T00:47:43.823060" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t64" name="Odl_To_Play_pmsi_mldp_p2mp_lsp" line="222">
<status status="FAIL" start="2026-04-21T00:47:43.823521" elapsed="0.000574">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t65" name="Play_To_Odl_pmsi_mldp_p2mp_lsp" line="224">
<status status="FAIL" start="2026-04-21T00:47:43.824263" elapsed="0.000295">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t66" name="Odl_To_Play_pmsi_pim_ssm_tree" line="227">
<status status="FAIL" start="2026-04-21T00:47:43.824723" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t67" name="Play_To_Odl_pmsi_pim_ssm_tree" line="229">
<status status="FAIL" start="2026-04-21T00:47:43.825166" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t68" name="Odl_To_Play_pmsi_pim_sm_tree" line="232">
<status status="FAIL" start="2026-04-21T00:47:43.825629" elapsed="0.000271">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t69" name="Play_To_Odl_pmsi_pim_sm_tree" line="234">
<status status="FAIL" start="2026-04-21T00:47:43.826061" elapsed="0.000271">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t70" name="Odl_To_Play_pmsi_bidir_pim_tree" line="237">
<status status="FAIL" start="2026-04-21T00:47:43.826511" elapsed="0.000282">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t71" name="Play_To_Odl_pmsi_bidir_pim_tree" line="239">
<status status="FAIL" start="2026-04-21T00:47:43.826991" elapsed="0.000278">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t72" name="Odl_To_Play_pmsi_ingress_replication" line="242">
<status status="FAIL" start="2026-04-21T00:47:43.827430" elapsed="0.000297">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t73" name="Play_To_Odl_pmsi_ingress_replication" line="244">
<status status="FAIL" start="2026-04-21T00:47:43.827890" elapsed="0.000280">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t74" name="Odl_To_Play_pmsi_mldp_mp2mp_lsp" line="247">
<status status="FAIL" start="2026-04-21T00:47:43.828331" elapsed="0.000288">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t75" name="Play_To_Odl_pmsi_mldp_mp2mp_lsp" line="249">
<status status="FAIL" start="2026-04-21T00:47:43.828779" elapsed="0.000300">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t76" name="Kill_Talking_BGP_Speaker" line="252">
<doc>Abort the Python speaker</doc>
<status status="FAIL" start="2026-04-21T00:47:43.829241" elapsed="0.000318">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t77" name="Delete_Bgp_Peer_Configuration" line="258">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.829725" elapsed="0.000384">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s13-t78" name="Deconfigure_App_Peer" line="264">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:43.830269" elapsed="0.000373">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.831391" elapsed="0.000118"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.831732" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.831661" elapsed="0.000117"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:43.831171" elapsed="0.000658"/>
</kw>
<doc>Functional test for bgp - evpn

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 tests advertising and receiveing routes with evpn content.
It uses play.py and odl as bgp peers. Routes advertized from odl
are configured via application peer. Routes advertised from play.py are
stored in *.hex files. These files are used also as expected data which
is recevied from odl.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.648999" elapsed="0.182859">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s14" name="040 Bgp Functional Route Ref" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/040_bgp_functional_route_ref.robot">
<kw name="Start_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-21T00:47:43.916248" 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-21T00:47:43.911991" elapsed="0.004305"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:43.911772" elapsed="0.004585"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.921209" 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-21T00:47:43.917417" elapsed="0.003820"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:43.921429" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.921320" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.921297" elapsed="0.000216"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.922042" 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-21T00:47:43.921688" elapsed="0.000397"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.922573" 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-21T00:47:43.922247" 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-04-21T00:47:43.923104" elapsed="0.000314"/>
</kw>
<msg time="2026-04-21T00:47:43.923537" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:43.923585" 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-21T00:47:43.922769" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.924146" 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-21T00:47:43.923776" elapsed="0.000397"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.925155" 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-21T00:47:43.924890" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.925626" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:43.925330" elapsed="0.000322"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.926093" 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-21T00:47:43.925809" elapsed="0.000310"/>
</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-21T00:47:43.928637" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.928437" elapsed="0.000273"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.926172" elapsed="0.002565"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.929301" 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-21T00:47:43.928895" elapsed="0.000450"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.929930" 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-21T00:47:43.929533" elapsed="0.000438"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.930529" 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-21T00:47:43.930134" elapsed="0.000440"/>
</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-21T00:47:43.924415" elapsed="0.006220"/>
</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-21T00:47:43.917081" elapsed="0.013611"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.930872" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.930758" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.930739" elapsed="0.000200"/>
</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-21T00:47:43.934162" 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-21T00:47:43.933785" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.934658" 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-21T00:47:43.934350" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.934731" elapsed="0.000032"/>
</return>
<msg time="2026-04-21T00:47:43.934886" 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-21T00:47:43.933432" elapsed="0.001477"/>
</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-21T00:47:43.935244" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.935070" elapsed="0.000232"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.934961" elapsed="0.000367"/>
</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-21T00:47:43.931155" elapsed="0.004225"/>
</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-21T00:47:43.935546" elapsed="0.000211"/>
</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-21T00:47:43.936063" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.935925" elapsed="0.000202"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.935808" elapsed="0.000378"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:43.916653" elapsed="0.019589"/>
</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-21T00:47:43.938870" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.938761" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.938743" elapsed="0.000194"/>
</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-21T00:47:43.943690" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.943584" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.943566" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.944691" 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-21T00:47:43.944299" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.945187" 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-21T00:47:43.944900" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:43.945258" elapsed="0.000028"/>
</return>
<msg time="2026-04-21T00:47:43.945410" 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-21T00:47:43.943977" 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-21T00:47:43.945801" 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-21T00:47:43.946045" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:43.945897" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:43.945881" elapsed="0.000240"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:43.945659" elapsed="0.000485"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.945508" elapsed="0.000660"/>
</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-21T00:47:43.943289" elapsed="0.002931"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:43.936827" elapsed="0.009448"/>
</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-21T00:47:43.936397" elapsed="0.009919"/>
</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-21T00:47:43.911442" elapsed="0.034923"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.946892" level="INFO">${mininet_conn_id} = 1</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:43.946540" elapsed="0.000378"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.947395" level="INFO">${mininet_conn_id} = 1</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-21T00:47:43.947086" elapsed="0.000350"/>
</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-21T00:47:43.949102" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:43.949178" 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-21T00:47:43.948835" elapsed="0.000367"/>
</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-21T00:47:43.949360" elapsed="0.000343"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.950736" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:43.950976" 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-21T00:47:43.950231" elapsed="0.001183">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.951471" 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-21T00:47:43.949870" elapsed="0.001664"/>
</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-21T00:47:43.948380" elapsed="0.003259">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:43.951686" 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-21T00:47:43.947999" elapsed="0.003729"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.947648" elapsed="0.004207">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.952071" elapsed="0.000025"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.952283" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==3.4.16</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.952515" elapsed="0.000025"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.952699" elapsed="0.000020"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:43.952931" elapsed="0.000023"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.911165" elapsed="0.041870">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s14-t1" name="Configure_App_Peer" line="51">
<doc>Configures bgp application peer. Openconfig is used for carbon and above.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.953091" elapsed="0.000389">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s14-t2" name="Reconfigure_ODL_To_Accept_Connection" line="65">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.953675" elapsed="0.000389">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s14-t3" name="Exa_To_Send_Route_Refresh" line="82">
<doc>Exabgp sends route refresh and count received updates</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.954236" elapsed="0.000378">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s14-t4" name="Odl_To_Send_Route_Refresh" line="102">
<doc>Sends route refresh request and checks if exabgp receives it</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:43.954789" elapsed="0.000368">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s14-t5" name="Delete_Bgp_Peer_Configuration" line="124">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.955328" elapsed="0.000410">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s14-t6" name="Deconfigure_App_Peer" line="133">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:43.955920" elapsed="0.000366">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.962225" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:43.961900" elapsed="0.000353"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:43.963685" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:43.963825" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:43.963869" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:43.963910" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:43.963949" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.963503" elapsed="0.000750">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.965313" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.964982" elapsed="0.000462">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:43.965566" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:43.965610" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:43.964445" elapsed="0.001188"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.966212" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:43.965802" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.967273" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.967021" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.967724" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.967470" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.968178" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:43.967917" elapsed="0.000304"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:43.966664" elapsed="0.001611"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:43.966314" elapsed="0.001997"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.966295" elapsed="0.002041"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.968518" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.968391" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.968374" elapsed="0.000245"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:43.968768" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:43.968676" elapsed="0.000134"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:43.968660" elapsed="0.000172"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:43.969329" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.968974" elapsed="0.000415">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:43.962946" elapsed="0.006582">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:43.969584" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.962412" elapsed="0.007228"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.961284" elapsed="0.008467">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:43.969804" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.957536" elapsed="0.012320"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.957177" elapsed="0.012786">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.956953" elapsed="0.013118">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:43.970231" elapsed="0.000100"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:43.970560" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:43.970474" elapsed="0.000131"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="FAIL" start="2026-04-21T00:47:43.956697" elapsed="0.014001">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Functional test for bgp - route refresh

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 tests sending and receiveing route refresh message.
It uses odl and exabgp as bgp peers.
Sending route refresh message from odl is initiated via restconf.
If route refresh is received by odl, correct advertising of routes
is verified. Receiving of route refresh by odl is verified by
checking appropriate message counter via odl-bgpcep-bgp-cli and
restconf using BGP neighbor operational state</doc>
<status status="FAIL" start="2026-04-21T00:47:43.832702" elapsed="0.138050">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</suite>
<suite id="s1-s15" name="020 Bgp Functional Multipath" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/020_bgp_functional_multipath.robot">
<kw name="Start_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-21T00:47:44.057088" 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-21T00:47:44.052679" elapsed="0.004456"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.052446" elapsed="0.004749"/>
</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-21T00:47:44.062040" 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-21T00:47:44.058263" elapsed="0.003805"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.062244" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.062144" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.062124" elapsed="0.000182"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.062827" 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-21T00:47:44.062462" elapsed="0.000408"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.063364" 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-21T00:47:44.063031" elapsed="0.000359"/>
</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-21T00:47:44.063913" elapsed="0.000274"/>
</kw>
<msg time="2026-04-21T00:47:44.064319" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.064366" 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-21T00:47:44.063578" elapsed="0.000811"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.064945" 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-21T00:47:44.064577" elapsed="0.000394"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.065956" 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-21T00:47:44.065694" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.066394" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.066133" elapsed="0.000286"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.066878" 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-21T00:47:44.066592" elapsed="0.000313"/>
</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-21T00:47:44.069599" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.069387" elapsed="0.000284"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.066954" elapsed="0.002744"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.070253" 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-21T00:47:44.069857" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.070867" 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-21T00:47:44.070456" elapsed="0.000453"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.071455" 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-21T00:47:44.071069" elapsed="0.000443"/>
</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-21T00:47:44.065219" elapsed="0.006353"/>
</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-21T00:47:44.057929" elapsed="0.013698"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.071802" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.071691" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.071672" elapsed="0.000195"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.074988" 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-21T00:47:44.074614" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.075457" 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-21T00:47:44.075173" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.075544" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:44.075699" 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-21T00:47:44.074278" elapsed="0.001445"/>
</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-21T00:47:44.076061" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.075889" elapsed="0.000231"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.075780" elapsed="0.000365"/>
</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-21T00:47:44.072086" elapsed="0.004110"/>
</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-21T00:47:44.076346" elapsed="0.000223"/>
</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-21T00:47:44.076885" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.076749" elapsed="0.000198"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.076619" 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-21T00:47:44.057502" elapsed="0.019562"/>
</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-21T00:47:44.079757" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.079649" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.079631" elapsed="0.000193"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.084740" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.084635" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.084618" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.085752" 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-21T00:47:44.085359" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.086223" 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-21T00:47:44.085940" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.086292" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:44.086443" 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-21T00:47:44.085032" elapsed="0.001435"/>
</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-21T00:47:44.086821" 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-21T00:47:44.087068" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.086917" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.086900" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.086680" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.086533" elapsed="0.000658"/>
</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-21T00:47:44.084306" elapsed="0.002937"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.077686" elapsed="0.009610"/>
</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-21T00:47:44.077252" elapsed="0.010090"/>
</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-21T00:47:44.052143" elapsed="0.035249"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.087900" level="INFO">${tools_system_conn_id} = 1</msg>
<var>${tools_system_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.087556" elapsed="0.000370"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.088421" level="INFO">${tools_system_conn_id} = 1</msg>
<arg>${tools_system_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:44.088093" elapsed="0.000383"/>
</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-21T00:47:44.091054" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.091133" 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-21T00:47:44.089870" elapsed="0.001288"/>
</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-21T00:47:44.091318" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.092546" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.092773" 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-21T00:47:44.092200" elapsed="0.000990">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.093246" 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-21T00:47:44.091827" elapsed="0.001466"/>
</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-21T00:47:44.089420" elapsed="0.003972">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.093439" 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-21T00:47:44.089041" elapsed="0.004439"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.088691" elapsed="0.004929">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.093832" elapsed="0.000024"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>setuptools==44.0.0</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.094038" elapsed="0.000023"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==3.4.16</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.094242" elapsed="0.000022"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.094410" elapsed="0.000020"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.094639" elapsed="0.000023"/>
</kw>
<kw name="Store_Rib_Configuration">
<doc>Stores rib configuration</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.094775" elapsed="0.000021"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.051870" elapsed="0.043004">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s15-t1" name="Reconfigure_ODL_To_Accept_Connection" line="58">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.094927" elapsed="0.000404">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s15-t2" name="Odl Allpaths Exa SendReceived" line="71">
<doc>all-paths selected policy selected</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.095522" elapsed="0.000336">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s15-t3" name="Odl Npaths Exa SendReceived" line="81">
<doc>n-paths policy selected on odl</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.096032" elapsed="0.000346">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s15-t4" name="Delete_Bgp_Peer_Configuration" line="91">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.096576" elapsed="0.000384">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.103117" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:44.102792" elapsed="0.000352"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.104574" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:44.104706" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:44.104751" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:44.104791" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:44.104829" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.104372" elapsed="0.000745">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.105985" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.105662" elapsed="0.000447">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:44.106211" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:44.106258" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:44.105310" elapsed="0.000971"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.106873" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:44.106447" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.107945" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.107673" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.108380" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.108142" elapsed="0.000280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.108829" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.108593" elapsed="0.000279"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:44.107308" elapsed="0.001618"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:44.106976" elapsed="0.001986"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.106957" elapsed="0.002030"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.109141" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.109042" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.109026" elapsed="0.000181"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.109345" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.109257" elapsed="0.000129"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.109243" elapsed="0.000164"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.109949" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.109600" elapsed="0.000409">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:44.103832" elapsed="0.006300">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:44.110187" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.103303" elapsed="0.006940"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.102179" elapsed="0.008178">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:44.110410" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.098146" elapsed="0.012317"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.097806" elapsed="0.012783">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.097584" elapsed="0.013105">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Put_As_Xml_To_Uri" owner="TemplatedRequests">
<msg time="2026-04-21T00:47:44.114863" level="FAIL">Variable '${rib_old}' not found.</msg>
<arg>${OPENCONFIG_RIB_URI}</arg>
<arg>${rib_old}</arg>
<arg>session=${CONFIG_SESSION}</arg>
<doc>Specify XML headers and return Put_To_Uri response text.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.110903" elapsed="0.003995">Variable '${rib_old}' not found.</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.115066" elapsed="0.000099"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.115378" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.115309" elapsed="0.000113"/>
</kw>
<doc>Suite teardown keyword with old rib restoration</doc>
<status status="FAIL" start="2026-04-21T00:47:44.097314" elapsed="0.018256">Several failures occurred:

1) Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None

2) Variable '${rib_old}' not found.</status>
</kw>
<doc>Functional test suite for bgp - n-path and all-path selection

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 tests n-path and all-path selection policy.
It uses odl and exabgp as bgp peers. Routes advertized from odl
are configured via application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:43.971336" elapsed="0.144289">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None

2) Variable '${rib_old}' not found.</status>
</suite>
<suite id="s1-s16" name="060 Bgp Functional Mvpn" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/060_bgp_functional_mvpn.robot">
<kw name="Start_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-21T00:47:44.201653" 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-21T00:47:44.197372" elapsed="0.004328"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.197155" elapsed="0.004605"/>
</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-21T00:47:44.206518" 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-21T00:47:44.202811" elapsed="0.003735"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.206721" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.206621" elapsed="0.000141"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.206602" elapsed="0.000182"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.207287" 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-21T00:47:44.206936" elapsed="0.000394"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.207818" 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-21T00:47:44.207508" elapsed="0.000336"/>
</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-21T00:47:44.208340" elapsed="0.000306"/>
</kw>
<msg time="2026-04-21T00:47:44.208778" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.208826" 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-21T00:47:44.208009" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.209389" 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-21T00:47:44.209018" elapsed="0.000397"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.210386" 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-21T00:47:44.210126" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.210838" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.210580" elapsed="0.000284"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.211307" 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-21T00:47:44.211022" elapsed="0.000312"/>
</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-21T00:47:44.213827" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.213643" elapsed="0.000256"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.211383" elapsed="0.002542"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.214486" 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-21T00:47:44.214086" elapsed="0.000459"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.215117" 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-21T00:47:44.214716" elapsed="0.000443"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.215719" 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-21T00:47:44.215322" elapsed="0.000439"/>
</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-21T00:47:44.209674" elapsed="0.006145"/>
</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-21T00:47:44.202457" elapsed="0.013416"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.216049" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.215937" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.215919" elapsed="0.000197"/>
</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-21T00:47:44.219355" 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-21T00:47:44.218981" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.219851" 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-21T00:47:44.219563" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.219922" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:44.220073" 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-21T00:47:44.218652" elapsed="0.001445"/>
</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-21T00:47:44.220441" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.220267" elapsed="0.000260"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.220148" elapsed="0.000405"/>
</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-21T00:47:44.216351" elapsed="0.004254"/>
</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-21T00:47:44.220760" elapsed="0.000206"/>
</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-21T00:47:44.221271" elapsed="0.000020"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.221131" elapsed="0.000203"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.221015" elapsed="0.000344"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.202031" elapsed="0.019415"/>
</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-21T00:47:44.224067" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.223959" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.223941" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.228986" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.228881" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.228864" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.229991" 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-21T00:47:44.229616" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.230462" 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-21T00:47:44.230179" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.230549" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:44.230707" 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-21T00:47:44.229276" elapsed="0.001455"/>
</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-21T00:47:44.231072" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.231315" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.231168" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.231151" elapsed="0.000239"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.230927" elapsed="0.000486"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.230782" elapsed="0.000655"/>
</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-21T00:47:44.228596" elapsed="0.002891"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.222034" elapsed="0.009525"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:44.221619" elapsed="0.009981"/>
</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-21T00:47:44.196836" elapsed="0.034818"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.232165" level="INFO">${mininet_conn_id} = 1</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.231812" elapsed="0.000379"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.232702" level="INFO">${mininet_conn_id} = 1</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-21T00:47:44.232365" elapsed="0.000378"/>
</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-21T00:47:44.234389" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.234464" 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-21T00:47:44.234127" elapsed="0.000375"/>
</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-21T00:47:44.234664" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.236028" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.236251" 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-21T00:47:44.235530" elapsed="0.001161">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.236748" 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-21T00:47:44.235153" elapsed="0.001641"/>
</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-21T00:47:44.233696" elapsed="0.003197">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.236940" 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-21T00:47:44.233291" elapsed="0.003690"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.232939" elapsed="0.004166">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.237273" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>${PLAY_SCRIPT}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.237451" elapsed="0.000020"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.237734" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.196561" elapsed="0.041280">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s16-t1" name="Configure_App_Peer" line="49">
<doc>Configures bgp application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.237896" elapsed="0.000320">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t2" name="Reconfigure_ODL_To_Accept_Connection" line="57">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.238389" elapsed="0.000404">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t3" name="Start_Bgp_Peer" line="65">
<doc>Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.238961" elapsed="0.000648">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t4" name="Odl_To_Play_intra_as_ipmsi_ad" line="70">
<status status="FAIL" start="2026-04-21T00:47:44.239789" elapsed="0.000275">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t5" name="Play_To_Odl_intra_as_ipmsi_ad" line="74">
<status status="FAIL" start="2026-04-21T00:47:44.240231" elapsed="0.000297">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t6" name="Odl_To_Play_inter_as_ipmsi_ad" line="78">
<status status="FAIL" start="2026-04-21T00:47:44.240689" elapsed="0.000275">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t7" name="Play_To_Odl_inter_as_ipmsi_ad" line="82">
<status status="FAIL" start="2026-04-21T00:47:44.241120" elapsed="0.000273">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t8" name="Odl_To_Play_spmsi_ad" line="86">
<status status="FAIL" start="2026-04-21T00:47:44.241573" elapsed="0.000267">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t9" name="Play_To_Odl_spmsi_ad" line="90">
<status status="FAIL" start="2026-04-21T00:47:44.242003" elapsed="0.000260">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t10" name="Odl_To_Play_leaf_ad" line="94">
<status status="FAIL" start="2026-04-21T00:47:44.242431" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t11" name="Play_To_Odl_leaf_ad" line="98">
<status status="FAIL" start="2026-04-21T00:47:44.242874" elapsed="0.000258">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t12" name="Odl_To_Play_source_active_ad" line="102">
<status status="FAIL" start="2026-04-21T00:47:44.243287" elapsed="0.000296">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t13" name="Play_To_Odl_source_active_ad" line="106">
<status status="FAIL" start="2026-04-21T00:47:44.243748" elapsed="0.000273">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t14" name="Odl_To_Play_shared_tree_join" line="110">
<status status="FAIL" start="2026-04-21T00:47:44.244177" elapsed="0.000268">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t15" name="Play_To_Odl_shared_tree_join" line="114">
<status status="FAIL" start="2026-04-21T00:47:44.244623" elapsed="0.000269">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t16" name="Odl_To_Play_source_tree_join" line="118">
<status status="FAIL" start="2026-04-21T00:47:44.245053" elapsed="0.000269">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t17" name="Play_To_Odl_source_tree_join" line="122">
<status status="FAIL" start="2026-04-21T00:47:44.245483" elapsed="0.000290">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t18" name="Odl_To_Play_intra_pe_distinguisher" line="126">
<status status="FAIL" start="2026-04-21T00:47:44.245935" elapsed="0.000277">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t19" name="Play_To_Odl_intra_pe_distinguisher" line="130">
<status status="FAIL" start="2026-04-21T00:47:44.246368" elapsed="0.000301">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t20" name="Odl_To_Play_intra_vrf" line="134">
<status status="FAIL" start="2026-04-21T00:47:44.246830" elapsed="0.000258">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t21" name="Play_To_Odl_intra_vrf" line="138">
<status status="FAIL" start="2026-04-21T00:47:44.247242" elapsed="0.000303">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t22" name="Odl_To_Play_intra_source_as" line="142">
<status status="FAIL" start="2026-04-21T00:47:44.247702" elapsed="0.000275">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t23" name="Play_To_Odl_intra_source_as" line="146">
<status status="FAIL" start="2026-04-21T00:47:44.248133" elapsed="0.000266">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t24" name="Odl_To_Play_intra_source_as_4" line="150">
<status status="FAIL" start="2026-04-21T00:47:44.248574" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t25" name="Play_To_Odl_intra_source_as_4" line="154">
<status status="FAIL" start="2026-04-21T00:47:44.249001" elapsed="0.000276">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t26" name="Play_To_Odl_intra_ipv6" line="158">
<status status="FAIL" start="2026-04-21T00:47:44.249437" elapsed="0.000279">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t27" name="Kill_Talking_BGP_Speaker" line="162">
<doc>Abort the Python speaker</doc>
<status status="FAIL" start="2026-04-21T00:47:44.249873" elapsed="0.000299">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t28" name="Delete_Bgp_Peer_Configuration" line="168">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.250341" elapsed="0.000401">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s16-t29" name="Deconfigure_App_Peer" line="176">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:44.250933" elapsed="0.000384">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.251981" elapsed="0.000367"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.252598" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.252520" elapsed="0.000124"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:44.251754" elapsed="0.000940"/>
</kw>
<doc>Functional test for bgp - mvpn

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 distbmution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This suite tests advertising mvpn routes to odl. For advertising play.py is used,
and particular files are stored as *.hex files. There are 7 different
types of routes used for auto-discovery of multicast network. Also 4 more routes
with new attributes specific for mvpn.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.116227" elapsed="0.136496">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s17" name="070 Bgp Functional L3Vpn Mcast" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/070_bgp_functional_l3vpn_mcast.robot">
<kw name="Start_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-21T00:47:44.338486" 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-21T00:47:44.334215" elapsed="0.004329"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.333986" elapsed="0.004619"/>
</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-21T00:47:44.343317" 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-21T00:47:44.339655" elapsed="0.003690"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.343536" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.343422" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.343402" elapsed="0.000203"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.344113" 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-21T00:47:44.343764" elapsed="0.000392"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.344680" 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-21T00:47:44.344318" elapsed="0.000389"/>
</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-21T00:47:44.345204" elapsed="0.000272"/>
</kw>
<msg time="2026-04-21T00:47:44.345589" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.345634" 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-21T00:47:44.344872" elapsed="0.000784"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.346185" 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-21T00:47:44.345824" elapsed="0.000386"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.347183" 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-21T00:47:44.346923" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.347632" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.347359" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.348099" 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-21T00:47:44.347815" elapsed="0.000310"/>
</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-21T00:47:44.350813" elapsed="0.000030"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.350627" elapsed="0.000264"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.348174" elapsed="0.002744"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.351471" 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-21T00:47:44.351076" elapsed="0.000454"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.352096" 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-21T00:47:44.351699" elapsed="0.000448"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.352714" 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-21T00:47:44.352309" elapsed="0.000447"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:44.346452" elapsed="0.006361"/>
</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-21T00:47:44.339305" elapsed="0.013605"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.353087" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.352975" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.352956" elapsed="0.000197"/>
</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-21T00:47:44.356250" 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-21T00:47:44.355853" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.356754" 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-21T00:47:44.356438" elapsed="0.000343"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.356825" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:44.356978" 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-21T00:47:44.355526" elapsed="0.001482"/>
</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-21T00:47:44.357344" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.357167" elapsed="0.000235"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.357059" elapsed="0.000368"/>
</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-21T00:47:44.353367" elapsed="0.004112"/>
</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-21T00:47:44.357649" elapsed="0.000211"/>
</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-21T00:47:44.358164" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.358026" elapsed="0.000201"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.357911" elapsed="0.000341"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.338879" elapsed="0.019424"/>
</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-21T00:47:44.360952" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.360843" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.360825" elapsed="0.000193"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.365861" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.365756" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.365739" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.366867" 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-21T00:47:44.366473" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.367338" 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-21T00:47:44.367054" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.367407" elapsed="0.000029"/>
</return>
<msg time="2026-04-21T00:47:44.367575" 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-21T00:47:44.366149" elapsed="0.001450"/>
</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-21T00:47:44.367972" 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-21T00:47:44.368219" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.368067" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.368050" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.367826" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.367676" elapsed="0.000665"/>
</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-21T00:47:44.365457" elapsed="0.002969"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.358891" elapsed="0.009614"/>
</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-21T00:47:44.358455" elapsed="0.010094"/>
</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-21T00:47:44.333678" elapsed="0.034919"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.369091" level="INFO">${mininet_conn_id} = 1</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.368753" elapsed="0.000365"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.369617" level="INFO">${mininet_conn_id} = 1</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-21T00:47:44.369286" elapsed="0.000373"/>
</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-21T00:47:44.372274" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.372353" 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-21T00:47:44.371043" elapsed="0.001334"/>
</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-21T00:47:44.372556" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.373748" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.373965" 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-21T00:47:44.373416" elapsed="0.000966">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.374439" 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-21T00:47:44.373051" elapsed="0.001435"/>
</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-21T00:47:44.370612" elapsed="0.003994">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.374652" 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-21T00:47:44.370211" elapsed="0.004483"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.369856" elapsed="0.004925">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.374944" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>${PLAY_SCRIPT}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.375120" elapsed="0.000020"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.375382" elapsed="0.000033"/>
</kw>
<doc>Initialize SetupUtils. Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.333379" elapsed="0.042147">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s17-t1" name="Configure_App_Peer" line="48">
<doc>Configures bgp application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.375582" elapsed="0.000331">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t2" name="Reconfigure_ODL_To_Accept_Connection" line="56">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.376097" elapsed="0.000383">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t3" name="Start_Bgp_Peer" line="64">
<doc>Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.376664" elapsed="0.000605">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t4" name="Odl_To_Play_l3vpn_mcast" line="69">
<status status="FAIL" start="2026-04-21T00:47:44.377435" elapsed="0.000306">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t5" name="Play_To_Odl_l3vpn_mcast" line="73">
<status status="FAIL" start="2026-04-21T00:47:44.377906" elapsed="0.000264">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t6" name="Odl_To_Play_l3vpn_mcast_ipv6" line="77">
<status status="FAIL" start="2026-04-21T00:47:44.378334" elapsed="0.000289">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t7" name="Play_To_Odl_l3vpn_mcast_ipv6" line="81">
<status status="FAIL" start="2026-04-21T00:47:44.378782" elapsed="0.000272">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t8" name="Kill_Talking_BGP_Speaker" line="85">
<doc>Abort the Python speaker</doc>
<status status="FAIL" start="2026-04-21T00:47:44.379214" elapsed="0.000346">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t9" name="Delete_Bgp_Peer_Configuration" line="91">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.379721" elapsed="0.000385">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s17-t10" name="Deconfigure_App_Peer" line="99">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:44.380299" elapsed="0.000384">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.381252" elapsed="0.000097"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.381592" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.381519" elapsed="0.000119"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:44.381037" elapsed="0.000650"/>
</kw>
<doc>Functional test for bgp - l3vpn-mutlicast

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 distbmution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This suite tests advertising l3vpn_mcast routes to odl. For advertising play.py is used,
and particular files are stored as *.hex files.
There are L3vpn-ipv4-multicast routes and L3vpn-ipv6-multicast routes tested.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.253359" elapsed="0.128356">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s18" name="080 Bgp Functional Rt Constrain" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/080_bgp_functional_rt_constrain.robot">
<kw name="Start_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-21T00:47:44.468118" 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-21T00:47:44.463872" elapsed="0.004292"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.463652" elapsed="0.004574"/>
</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-21T00:47:44.473067" 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-21T00:47:44.469355" elapsed="0.003740"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.473276" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.473175" elapsed="0.000142"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.473154" elapsed="0.000185"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.473863" 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-21T00:47:44.473506" elapsed="0.000400"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.474378" 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-21T00:47:44.474070" elapsed="0.000334"/>
</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-21T00:47:44.474925" elapsed="0.000273"/>
</kw>
<msg time="2026-04-21T00:47:44.475293" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.475338" 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-21T00:47:44.474585" elapsed="0.000776"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.475913" 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-21T00:47:44.475549" elapsed="0.000390"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.476947" 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-21T00:47:44.476684" elapsed="0.000290"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.477382" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.477125" elapsed="0.000283"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.477907" 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-21T00:47:44.477583" elapsed="0.000351"/>
</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-21T00:47:44.480446" elapsed="0.000037"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.480257" elapsed="0.000287"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.477985" elapsed="0.002586"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.481135" 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-21T00:47:44.480735" elapsed="0.000444"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.481759" 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-21T00:47:44.481349" elapsed="0.000452"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.482351" 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-21T00:47:44.481964" elapsed="0.000429"/>
</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-21T00:47:44.476183" elapsed="0.006268"/>
</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-21T00:47:44.469017" elapsed="0.013550"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.482752" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.482638" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.482619" elapsed="0.000201"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.486124" 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-21T00:47:44.485743" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.486626" 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-21T00:47:44.486316" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.486698" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:44.486852" 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-21T00:47:44.485397" elapsed="0.001480"/>
</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-21T00:47:44.487212" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.487036" elapsed="0.000235"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.486928" elapsed="0.000369"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-21T00:47:44.483038" elapsed="0.004311"/>
</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-21T00:47:44.487522" elapsed="0.000211"/>
</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-21T00:47:44.488053" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.487901" elapsed="0.000219"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.487784" elapsed="0.000362"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.468519" elapsed="0.019679"/>
</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-21T00:47:44.490834" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.490723" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.490706" elapsed="0.000195"/>
</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-21T00:47:44.495771" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.495641" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.495624" elapsed="0.000214"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.496802" 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-21T00:47:44.496402" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.497279" 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-21T00:47:44.496993" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.497349" elapsed="0.000028"/>
</return>
<msg time="2026-04-21T00:47:44.497516" 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-21T00:47:44.496076" elapsed="0.001466"/>
</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-21T00:47:44.497883" 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-21T00:47:44.498130" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.497979" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.497962" elapsed="0.000244"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.497739" elapsed="0.000490"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.497592" elapsed="0.000661"/>
</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-21T00:47:44.495334" elapsed="0.002971"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.488795" elapsed="0.009603"/>
</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-21T00:47:44.488351" elapsed="0.010088"/>
</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-21T00:47:44.463325" elapsed="0.035162"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.499008" level="INFO">${mininet_conn_id} = 1</msg>
<var>${mininet_conn_id}</var>
<arg>${TOOLS_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.498661" elapsed="0.000373"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.499530" level="INFO">${mininet_conn_id} = 1</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-21T00:47:44.499203" elapsed="0.000381"/>
</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-21T00:47:44.501253" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.501329" 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-21T00:47:44.500981" elapsed="0.000371"/>
</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-21T00:47:44.501529" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.502888" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.503121" 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-21T00:47:44.502383" elapsed="0.001220">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.503661" 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-21T00:47:44.502017" elapsed="0.001692"/>
</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-21T00:47:44.500547" elapsed="0.003265">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.503858" 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-21T00:47:44.500143" elapsed="0.003757"/>
</kw>
<arg>${TOOLS_SYSTEM_USER}</arg>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.499787" elapsed="0.004201">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.504154" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>${PLAY_SCRIPT}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.504332" elapsed="0.000020"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.504616" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.463049" elapsed="0.041675">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s18-t1" name="Configure_App_Peer" line="48">
<doc>Configures bgp application peer.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.504778" elapsed="0.000326">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t2" name="Reconfigure_ODL_To_Accept_Connection" line="56">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.505277" elapsed="0.000398">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t3" name="Start_Bgp_Peer" line="64">
<doc>Start Python speaker to connect to ODL. We need to do WUKS until odl really starts to accept incomming bgp connection. The failure happens if the incomming connection comes too quickly after configuring the peer in the previous test case.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.505842" elapsed="0.000599">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t4" name="Odl_To_Play_rt_constrain_default" line="69">
<status status="FAIL" start="2026-04-21T00:47:44.506627" elapsed="0.000277">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t5" name="Play_To_Odl_rt_constrain_default" line="73">
<status status="FAIL" start="2026-04-21T00:47:44.507068" elapsed="0.000301">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t6" name="Odl_To_Play_rt_constrain_type_0" line="77">
<status status="FAIL" start="2026-04-21T00:47:44.507570" elapsed="0.000280">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t7" name="Play_To_Odl_rt_constrain_type_0" line="81">
<status status="FAIL" start="2026-04-21T00:47:44.508013" elapsed="0.000273">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t8" name="Odl_To_Play_rt_constrain_type_1" line="85">
<status status="FAIL" start="2026-04-21T00:47:44.508446" elapsed="0.000294">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t9" name="Play_To_Odl_rt_constrain_type_1" line="89">
<status status="FAIL" start="2026-04-21T00:47:44.508904" elapsed="0.000274">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t10" name="Odl_To_Play_rt_constrain_type_2" line="93">
<status status="FAIL" start="2026-04-21T00:47:44.509335" elapsed="0.000295">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t11" name="Play_To_Odl_rt_constrain_type_2" line="97">
<status status="FAIL" start="2026-04-21T00:47:44.509825" elapsed="0.000281">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t12" name="Kill_Talking_BGP_Speaker" line="101">
<doc>Abort the Python speaker</doc>
<status status="FAIL" start="2026-04-21T00:47:44.510269" elapsed="0.000310">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t13" name="Delete_Bgp_Peer_Configuration" line="107">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.510742" elapsed="0.000383">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s18-t14" name="Deconfigure_App_Peer" line="115">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:44.511308" elapsed="0.000393">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.512286" elapsed="0.000098"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.512620" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.512549" elapsed="0.000123"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:44.512070" elapsed="0.000652"/>
</kw>
<doc>Functional test for bgp - route-target-constrain safi

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 distbmution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This suite tests advertising rt-constrain routes to odl. For advertising from peer,
play.py is used, sending hex messages to odl.
For advertising to app-peer, we are sending post requests with routes in xml.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.382301" elapsed="0.130450">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s19" name="090 Bgp Functional Rt Constrain Validation" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/090_bgp_functional_rt_constrain_validation.robot">
<kw name="Start_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-21T00:47:44.608458" 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-21T00:47:44.604106" elapsed="0.004423"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.603881" elapsed="0.004710"/>
</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-21T00:47:44.613503" 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-21T00:47:44.609685" elapsed="0.003847"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.613729" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.613621" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.613592" elapsed="0.000202"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.614307" 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-21T00:47:44.613951" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.614860" 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-21T00:47:44.614533" 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-04-21T00:47:44.615396" elapsed="0.000295"/>
</kw>
<msg time="2026-04-21T00:47:44.615790" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.615836" 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-21T00:47:44.615056" elapsed="0.000803"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.616419" 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-21T00:47:44.616044" elapsed="0.000402"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.617434" 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-21T00:47:44.617171" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.617889" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.617630" elapsed="0.000285"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.618361" 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-21T00:47:44.618076" elapsed="0.000311"/>
</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-21T00:47:44.621106" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.620918" elapsed="0.000258"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.618439" elapsed="0.002765"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.621792" 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-21T00:47:44.621367" elapsed="0.000471"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.622448" 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-21T00:47:44.622048" elapsed="0.000458"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.623063" 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-21T00:47:44.622678" elapsed="0.000428"/>
</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-21T00:47:44.616716" elapsed="0.006448"/>
</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-21T00:47:44.609327" elapsed="0.013892"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.623394" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.623283" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.623265" elapsed="0.000195"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.626628" 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-21T00:47:44.626238" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.627104" 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-21T00:47:44.626819" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.627174" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:44.627328" 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-21T00:47:44.625911" elapsed="0.001441"/>
</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-21T00:47:44.627720" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.627530" elapsed="0.000250"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.627402" elapsed="0.000403"/>
</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-21T00:47:44.623714" elapsed="0.004181"/>
</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-21T00:47:44.628054" elapsed="0.000209"/>
</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-21T00:47:44.628591" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.628435" elapsed="0.000221"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.628312" elapsed="0.000369"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.608886" elapsed="0.019846"/>
</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-21T00:47:44.631406" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.631297" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.631280" elapsed="0.000193"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.636433" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.636323" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.636306" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.637467" 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-21T00:47:44.637082" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.637967" 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-21T00:47:44.637680" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.638038" elapsed="0.000028"/>
</return>
<msg time="2026-04-21T00:47:44.638190" 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-21T00:47:44.636746" elapsed="0.001468"/>
</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-21T00:47:44.638601" elapsed="0.000024"/>
</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-21T00:47:44.638897" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.638735" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.638716" elapsed="0.000260"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.638417" elapsed="0.000584"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.638264" elapsed="0.000762"/>
</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-21T00:47:44.636041" elapsed="0.003038"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.629309" elapsed="0.009825"/>
</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-21T00:47:44.628885" elapsed="0.010290"/>
</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-21T00:47:44.603564" elapsed="0.035660"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.639770" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${ODL_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=6s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.639394" elapsed="0.000402"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.640288" level="INFO">${conn_id} = 1</msg>
<arg>${conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:44.639980" elapsed="0.000349"/>
</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-21T00:47:44.642187" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.642265" 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-21T00:47:44.641738" elapsed="0.000551"/>
</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-21T00:47:44.642456" elapsed="0.000342"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.643697" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.643938" 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-21T00:47:44.643350" elapsed="0.001019">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.644426" 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-21T00:47:44.642974" elapsed="0.001499"/>
</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-21T00:47:44.641280" elapsed="0.003314">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.644641" 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-21T00:47:44.640886" elapsed="0.003796"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.640549" elapsed="0.004220">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.644937" elapsed="0.000022"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>${PLAY_SCRIPT}</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.645118" elapsed="0.000020"/>
</kw>
<kw name="Assure_Library_Ipaddr" owner="SSHKeywords">
<arg>target_dir=.</arg>
<doc>Tests whether ipaddr module is present on ssh-connected machine, Puts ipaddr.py to target_dir if not.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.645384" elapsed="0.000024"/>
</kw>
<doc>Initialize SetupUtils. Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.603261" elapsed="0.042243">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s19-t1" name="Reconfigure_ODL_To_Accept_Connection" line="57">
<doc>Configures BGP peer module with initiate-connection set to false.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.645563" elapsed="0.000426">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t2" name="Start_Bgp_Peers" line="72">
<doc>Start Python speaker to connect to ODL. We give each speaker time until odl really starts to accept incoming
bgp connection. The failure happens if the incoming connection comes too quickly after configuring the peer.</doc>
<tag>local_run</tag>
<status status="FAIL" start="2026-04-21T00:47:44.646169" elapsed="0.000616">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t3" name="Play_To_Odl_ext_l3vpn_rt_arg" line="82">
<doc>This TC sends route-target route containing route-target argument from node 1 to odl
so odl can identify this peer as appropriate for advertizement when it recieves such route.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.646960" elapsed="0.000590">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t4" name="Play_To_Odl_rt_constrain_type_0" line="98">
<doc>Sends RT route from node 2 to odl and then checks that odl advertizes l3vpn route from previous TC.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.647723" elapsed="0.000421">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t5" name="Check_Presence_Of_l3vpn_Route_In_Node_2_Effective_Rib_In_Table" line="111">
<doc>Checks l3vpn route is present in node 2 effective-rib-in table.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.648313" elapsed="0.000447">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t6" name="Check_l3vpn_Route_Advertisement_On_Each_Node" line="122">
<doc>Checks that each node received or did not receive update message containing given hex message.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.648959" elapsed="0.000441">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t7" name="Play_To_Odl_rt_constrain_type_1" line="128">
<doc>Sends RT route from node 3 to odl and then checks that odl does not advertize l3vpn route from previous TC,
that is that update message is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.649581" elapsed="0.000499">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t8" name="Play_To_Odl_remove_rt" line="145">
<doc>Removes RT from odl and then checks that second node withdrew l3vpn route and third node did not receive any message.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.650247" elapsed="0.000447">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t9" name="Play_To_Odl_remove_routes" line="150">
<doc>Removes rt arguments from odl.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.650874" elapsed="0.000308">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t10" name="Kill_Talking_BGP_Speakers" line="155">
<doc>Abort all Python speakers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.651361" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s19-t11" name="Delete_Bgp_Peers_Configuration" line="163">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.651854" elapsed="0.000390">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.652857" elapsed="0.000101"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.653188" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.653116" elapsed="0.000119"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="PASS" start="2026-04-21T00:47:44.652629" elapsed="0.000656"/>
</kw>
<doc>Functional test for bgp - route-target-constrain safi

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 distbmution,
and is available at http://www.eclipse.org/legal/epl-v10.html

This suite tests advertising rt-constrain routes to odl. For advertising from peer,
play.py is used, sending hex messages to odl.
There are 3 peers: ebgp and two ibgps. First peer sends l3vpn route with specific RT to odl, second peer
sends RT route and third peer only establishes connection. Then it is checked that odl advertizes l3vpn route
to second peer. Third peer sends wildcard RT route and it is checked that odl doesn't advertize l3vpn route
to it. Then second peer removes RT and it is checked that second peer withdrew RT route and that odl withdrew
l3vpn route from it.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.513383" elapsed="0.139931">Suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</suite>
<suite id="s1-s20" name="Bgp Policies Default" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/bgpfunct/bgp_policies_default.robot">
<kw name="Start_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-21T00:47:44.736839" 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-21T00:47:44.732705" elapsed="0.004181"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-21T00:47:44.732459" elapsed="0.004488"/>
</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-21T00:47:44.741622" 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-21T00:47:44.737995" elapsed="0.003655"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.741831" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.741729" elapsed="0.000144"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.741709" elapsed="0.000186"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.742402" 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-21T00:47:44.742046" elapsed="0.000400"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.742941" 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-21T00:47:44.742626" elapsed="0.000343"/>
</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-21T00:47:44.743467" elapsed="0.000297"/>
</kw>
<msg time="2026-04-21T00:47:44.743859" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.743907" 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-21T00:47:44.743132" elapsed="0.000798"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.744487" 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-21T00:47:44.744106" elapsed="0.000421"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.745486" 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-21T00:47:44.745220" elapsed="0.000309"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.745940" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.745681" elapsed="0.000286"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.746408" 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-21T00:47:44.746124" elapsed="0.000310"/>
</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-21T00:47:44.748927" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.748743" elapsed="0.000257"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.746535" elapsed="0.002492"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.749605" 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-21T00:47:44.749186" elapsed="0.000463"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.750203" 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-21T00:47:44.749811" elapsed="0.000434"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.750802" 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-21T00:47:44.750404" elapsed="0.000441"/>
</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-21T00:47:44.744773" elapsed="0.006130"/>
</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-21T00:47:44.737660" elapsed="0.013298"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.751133" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.751023" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.751004" elapsed="0.000196"/>
</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-21T00:47:44.755428" 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-21T00:47:44.755023" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.755938" 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-21T00:47:44.755641" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.756012" elapsed="0.000035"/>
</return>
<msg time="2026-04-21T00:47:44.756179" 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-21T00:47:44.754680" elapsed="0.001524"/>
</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-21T00:47:44.756557" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.756364" elapsed="0.000253"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.756255" elapsed="0.000387"/>
</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-21T00:47:44.751413" elapsed="0.005281"/>
</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-21T00:47:44.756848" elapsed="0.000206"/>
</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-21T00:47:44.757354" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.757221" elapsed="0.000198"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.757105" elapsed="0.000339"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.737218" elapsed="0.020291"/>
</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-21T00:47:44.760070" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.759953" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.759935" elapsed="0.000203"/>
</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-21T00:47:44.764847" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.764742" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.764724" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.765851" 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-21T00:47:44.765454" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.766327" 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-21T00:47:44.766039" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.766472" elapsed="0.000044"/>
</return>
<msg time="2026-04-21T00:47:44.766650" 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-21T00:47:44.765131" elapsed="0.001544"/>
</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-21T00:47:44.767015" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.767258" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:44.767113" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.767096" elapsed="0.000248"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.766875" elapsed="0.000491"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.766727" elapsed="0.000664"/>
</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-21T00:47:44.764443" elapsed="0.003000"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-21T00:47:44.758066" elapsed="0.009469"/>
</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-21T00:47:44.757660" elapsed="0.009918"/>
</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-21T00:47:44.732139" elapsed="0.035490"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.768155" level="INFO">${conn_id} = 1</msg>
<var>${conn_id}</var>
<arg>${ODL_SYSTEM_IP}</arg>
<arg>prompt=${DEFAULT_LINUX_PROMPT}</arg>
<arg>timeout=10s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-21T00:47:44.767782" elapsed="0.000402"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.768673" level="INFO">${conn_id} = 1</msg>
<arg>${conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:44.768351" elapsed="0.000364"/>
</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-21T00:47:44.770348" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.770425" 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-21T00:47:44.770077" elapsed="0.000371"/>
</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-21T00:47:44.770622" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.771998" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.772273" 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-21T00:47:44.771506" elapsed="0.001248">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.772811" 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-21T00:47:44.771108" elapsed="0.001750"/>
</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-21T00:47:44.769647" elapsed="0.003316">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.773011" 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-21T00:47:44.769242" elapsed="0.003815"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.768909" elapsed="0.004234">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Virtual_Env_Create" owner="SSHKeywords">
<arg>upgrade_pip=False</arg>
<doc>Creates virtual env. If not to use the default name, use Virtual_Env_Set_Path kw. Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.773354" elapsed="0.000024"/>
</kw>
<kw name="Virtual_Env_Install_Package" owner="SSHKeywords">
<arg>exabgp==4.0.5</arg>
<doc>Installs python package into virtual env. Use with version if needed (e.g. exabgp==3.4.16). Returns stdout.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.773585" elapsed="0.000023"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.773760" elapsed="0.000020"/>
</kw>
<kw name="Upload_Config_Files">
<doc>Uploads exabgp config files and replaces variables within those
config files with desired values.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.773986" elapsed="0.000022"/>
</kw>
<doc>Suite setup keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.731861" elapsed="0.042232">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s20-t1" name="Verify_Rib_Empty" line="40">
<doc>Checks empty example-ipv4-topology ready.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.774150" elapsed="0.000363">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t2" name="Configure_App_Peer" line="44">
<doc>Configures bgp application peer, and configures it's routes.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.774687" elapsed="0.000396">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t3" name="Reconfigure_ODL_To_Accept_Connections" line="60">
<doc>Configure BGP peer modules with initiate-connection set to false.
Configures 6 different peers, two internal, two external and two route-reflectors.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.775257" elapsed="0.000562">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t4" name="Start_Exabgps" line="76">
<doc>Start 6 exabgps as processes in background, each with it's own configuration.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.775982" elapsed="0.000356">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t5" name="Verify_Rib_Filled" line="86">
<doc>Verifies that sent routes are present in particular ribs.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.776515" elapsed="0.000350">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t6" name="Stop_All_Peers" line="91">
<doc>Send command to kill all exabgp processes running on controller</doc>
<status status="FAIL" start="2026-04-21T00:47:44.777030" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t7" name="Delete_Bgp_Peer_Configuration" line="98">
<doc>Revert the BGP configuration to the original state: without any configured peers.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.777535" elapsed="0.000395">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s20-t8" name="Deconfigure_App_Peer" line="113">
<doc>Revert the BGP configuration to the original state: without application peer</doc>
<status status="FAIL" start="2026-04-21T00:47:44.778137" elapsed="0.000382">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Stop_Suite" type="TEARDOWN">
<kw name="Virtual_Env_Delete" owner="SSHKeywords">
<kw name="Execute_Command_At_Cwd_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_At_Path_Should_Pass" owner="SSHKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.784513" level="INFO">${cd_and_command} = cd '.' &amp;&amp; rm -rf /tmp/defaultvenv</msg>
<var>${cd_and_command}</var>
<arg>cd '${path}' &amp;&amp; ${command}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:44.784172" elapsed="0.000370"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.785961" level="INFO">Executing command 'cd '.' &amp;&amp; rm -rf /tmp/defaultvenv'.</msg>
<msg time="2026-04-21T00:47:44.786094" level="INFO">${stdout} = None</msg>
<msg time="2026-04-21T00:47:44.786138" level="INFO">${stderr} = None</msg>
<msg time="2026-04-21T00:47:44.786178" level="INFO">${rc} = None</msg>
<msg time="2026-04-21T00:47:44.786216" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.785779" elapsed="0.000968">Connection not open</status>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.787647" level="FAIL">Could not get length of 'None'.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.787299" elapsed="0.000475">Could not get length of 'None'.</status>
</kw>
<msg time="2026-04-21T00:47:44.787880" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-04-21T00:47:44.787923" level="INFO">${result} = Could not get length of 'None'.</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:44.786944" elapsed="0.001002"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.788552" level="INFO">${success} = False</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:44.788120" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.789628" level="INFO">None</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.789356" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.790067" level="INFO">None</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.789827" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.790514" level="INFO">None</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.790260" elapsed="0.000308"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-04-21T00:47:44.789003" elapsed="0.001619"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:44.788665" elapsed="0.001992"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.788643" elapsed="0.002040"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.790838" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.790738" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.790721" elapsed="0.000188"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.791049" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.790960" elapsed="0.000130"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.790945" elapsed="0.000167"/>
</if>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.791628" level="FAIL">Got rc: None or stderr was not empty: None</msg>
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.791255" elapsed="0.000433">Got rc: None or stderr was not empty: None</status>
</kw>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="FAIL" start="2026-04-21T00:47:44.785211" elapsed="0.006612">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:44.791889" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${cd_and_command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.784700" elapsed="0.007288"/>
</kw>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>A keyword similar to Execute_Command_Should_Pass which performs "cd" to ${path} before executing the rm -rf /tmp/defaultvenv.
This is useful when rewriting bash scripts, as series of SSHLibrary.Execute_Command do not share current working directory.
TODO: Perhaps a Keyword which sets up environment variables would be useful as well.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.783574" elapsed="0.008530">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<msg time="2026-04-21T00:47:44.792157" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_At_Path_Should_Pass</arg>
<arg>command=${command}</arg>
<arg>path=${SSHKeywords__current_remote_working_directory}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.779736" elapsed="0.012474"/>
</kw>
<arg>rm -rf ${SSHKeywords__current_venv_path}</arg>
<doc>Run Execute_Command_At_Path_Should_Pass with previously set CWD as path.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.779362" elapsed="0.012957">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Deletes a directory with virtual env.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.779141" elapsed="0.013279">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.792597" elapsed="0.000101"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.792911" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.792842" elapsed="0.000114"/>
</kw>
<doc>Suite teardown keyword</doc>
<status status="FAIL" start="2026-04-21T00:47:44.778880" elapsed="0.014170">Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</kw>
<doc>Functional test for bgp routing policies

Copyright (c) 2018 AT&amp;T Intellectual Property. 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 uses 7 peers: app peer, 2x rr-client, 2x ebgp, 2x ibgp
Tests results on effective-rib-in dependant on their respective configurations.
Peers 1,2,4,5 are testing multiple ipv4 routes with additional arguments.
Peers 3,6 have ipv4 and ipv6 mpls-labeled routes.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.653989" elapsed="0.139122">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Several failures occurred:

1) Connection not open

2) Got rc: None or stderr was not empty: None</status>
</suite>
<suite id="s1-s21" name="Tcpmd5User" source="/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/suites/bgpcep/tcpmd5user/tcpmd5user.robot">
<kw name="Set_It_Up" type="SETUP">
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.881350" 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-21T00:47:44.877600" elapsed="0.003779"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.881576" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.881460" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.881439" elapsed="0.000202"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.882127" 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-21T00:47:44.881786" elapsed="0.000385"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.882656" 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-21T00:47:44.882328" elapsed="0.000355"/>
</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-21T00:47:44.883169" elapsed="0.000282"/>
</kw>
<msg time="2026-04-21T00:47:44.883562" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:44.883610" 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-21T00:47:44.882838" elapsed="0.000795"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.884174" 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-21T00:47:44.883807" elapsed="0.000393"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.885158" 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-21T00:47:44.884893" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.885596" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:44.885324" elapsed="0.000298"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.886059" 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-21T00:47:44.885769" elapsed="0.000317"/>
</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-21T00:47:44.888573" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.888378" elapsed="0.000303"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.886138" elapsed="0.002571"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.889248" 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-21T00:47:44.888862" elapsed="0.000430"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.889853" 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-21T00:47:44.889451" elapsed="0.000445"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.890429" 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-21T00:47:44.890056" elapsed="0.000416"/>
</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-21T00:47:44.884431" elapsed="0.006122"/>
</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-21T00:47:44.877243" elapsed="0.013367"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.890789" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.890675" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:44.890656" elapsed="0.000201"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.893930" 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-21T00:47:44.893553" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.894399" 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-21T00:47:44.894108" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-21T00:47:44.894470" elapsed="0.000046"/>
</return>
<msg time="2026-04-21T00:47:44.894643" 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-21T00:47:44.893219" elapsed="0.001449"/>
</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-21T00:47:44.894994" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.894828" elapsed="0.000226"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.894720" elapsed="0.000359"/>
</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-21T00:47:44.891065" elapsed="0.004067"/>
</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-21T00:47:44.895276" elapsed="0.000256"/>
</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-21T00:47:44.895834" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:44.895702" elapsed="0.000199"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.895583" elapsed="0.000345"/>
</for>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-21T00:47:44.876866" elapsed="0.019114"/>
</kw>
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.900310" level="INFO">Creating Session using : alias=default, url=http://:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72fac4d89590&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-21T00:47:44.899932" elapsed="0.000547"/>
</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-21T00:47:44.899528" elapsed="0.001035"/>
</kw>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.905721" 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-21T00:47:44.905314" elapsed="0.000434"/>
</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-21T00:47:44.907345" level="INFO">Length is 0.</msg>
<msg time="2026-04-21T00:47:44.907422" 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-21T00:47:44.907078" elapsed="0.000368"/>
</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-21T00:47:44.907624" elapsed="0.000365"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.908852" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-04-21T00:47:44.909085" 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-21T00:47:44.908527" elapsed="0.001008">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.909593" 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-21T00:47:44.908160" elapsed="0.001482"/>
</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-21T00:47:44.906639" elapsed="0.003113">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-04-21T00:47:44.909799" 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-21T00:47:44.906241" elapsed="0.003602"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.905919" elapsed="0.004015">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${odl_connection}</value>
<status status="NOT RUN" start="2026-04-21T00:47:44.909982" elapsed="0.000018"/>
</return>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.904958" elapsed="0.005121">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.910238" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.910395" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:44.910536" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:44.910481" elapsed="0.000093"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:44.910463" elapsed="0.000134"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.914824" elapsed="0.000027"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.900813" elapsed="0.014128">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.915099" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${current_prompt}</var>
<arg>${current_connection.prompt}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.915264" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${current_prompt}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.915426" elapsed="0.000021"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${prompt}</arg>
<arg>${current_prompt}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.915609" elapsed="0.000022"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>${CONFIG_SESSION}</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.915770" elapsed="0.000020"/>
</kw>
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<var>${name}</var>
<arg>bgpcep</arg>
<arg>pcep-pcc-mock</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.927411" elapsed="0.000027"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${filename}</arg>
<arg>${name}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.927615" elapsed="0.000022"/>
</kw>
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<doc>Set suite to not fail fast.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:44.927820" elapsed="0.000023"/>
</kw>
<doc>Create SSH session to Mininet machine, prepare HTTP client session to Controller.
Figure out latest pcc-mock version and download it from Nexus to Mininet.
Also, delete and create directories for json diff handling.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.876510" elapsed="0.051415">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s21-t1" name="Topology_Precondition" line="49">
<doc>Compare current pcep-topology to empty one.
Timeout is long enough to see that pcep is ready, with no PCC connected.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.927986" elapsed="0.000518">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t2" name="Start_Secure_Pcc_Mock" line="61">
<doc>Execute pcc-mock on Mininet with password set, fail if pcc-mock promptly exits. Keep pcc-mock running for next test cases.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.928683" elapsed="0.000437">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t3" name="Topology_Unauthorized_1" line="65">
<doc>Try to catch a glimpse of pcc-mock in pcep-topology. Pass if no change from Precondition is detected over 10 seconds.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.929289" elapsed="0.000469">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t4" name="Set_Wrong_Password" line="70">
<doc>Configure password in pcep dispatcher for client with Mininet IP address.
This password does not match what pcc-mock uses.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.929926" elapsed="0.000431">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t5" name="Topology_Unauthorized_2" line="75">
<doc>The same logic as Topology_Unauthorized_1 as incorrect password was provided to ODL.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.930583" elapsed="0.000401">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t6" name="Set_Correct_Password" line="80">
<doc>Configure password in pcep dispatcher for client with Mininet IP address.
This password finally matches what pcc-mock uses.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.931154" elapsed="0.000448">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t7" name="Topology_Intercondition" line="85">
<doc>Compare pcep-topology/path-computation-client to filled one, which includes a tunnel from pcc-mock.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.931768" elapsed="0.000400">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t8" name="Stop_Pcc_Mock_1" line="102">
<doc>Stops First instance of pcc-mock.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.932333" elapsed="0.000307">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t9" name="Topology_Unauthorized_3" line="110">
<doc>The same logic as Topology_Unauthorized_1, with no pcc-mock running.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.932807" elapsed="0.000369">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t10" name="Start_Secure_Pcc_Mock_2" line="115">
<doc>Execute pcc-mock on Mininet with new password set, fail if pcc-mock promptly exits. Keep pcc-mock running for next test cases.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.933341" elapsed="0.000471">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t11" name="Topology_Unauthorized_4" line="119">
<doc>The same logic as Topology_Unauthorized_1, but ODL password became incorrect with new pcc-mock running.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.933978" elapsed="0.000437">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t12" name="Set_Correct_Password_2" line="124">
<doc>Configure password in pcep dispatcher for client with Mininet IP address.
This password again matches what second pcc-mock instance uses.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.934614" elapsed="0.000479">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t13" name="Topology_Intercondition_2" line="129">
<doc>Compare pcep-topology/path-computation-client to filled one, which includes a tunnel from pcc-mock.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.935257" elapsed="0.000422">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t14" name="Update_Delegated" line="146">
<doc>Perform update-lsp on the mocked tunnel, check response is success.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.935843" elapsed="0.000341">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t15" name="Topology_Updated" line="156">
<doc>Compare pcep-topology/path-computation-client to default_on_updated, which includes the updated tunnel.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.936350" elapsed="0.000434">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t16" name="Unset_Password" line="174">
<doc>De-configure password for pcep dispatcher for client with Mininet IP address.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.936955" elapsed="0.000348">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t17" name="Topology_Unauthorized_5" line="182">
<doc>Wait for pcep-topology to become empty again.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.937465" elapsed="0.000362">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t18" name="Stop_Pcc_Mock_2" line="187">
<doc>Stops second instance of pcc-mock</doc>
<status status="FAIL" start="2026-04-21T00:47:44.937995" elapsed="0.000333">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t19" name="Topology_Postcondition" line="195">
<doc>Verify that pcep-topology stays empty.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-21T00:47:44.938520" elapsed="0.000329">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s21-t20" name="Delete_Pcep_Client_Module" line="200">
<doc>Delete Pcep client module.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.939015" elapsed="0.000309">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Tear_It_Down" type="TEARDOWN">
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-04-21T00:47:44.940145" level="FAIL">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</msg>
<arg>pccmock.log</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.939980" elapsed="0.000578">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</kw>
<kw name="Run" owner="OperatingSystem">
<msg time="2026-04-21T00:47:44.941334" level="INFO">Running command 'cat pccmock.log 2&gt;&amp;1'.</msg>
<msg time="2026-04-21T00:47:44.943404" level="INFO">${pccmocklog} = cat: pccmock.log: No such file or directory</msg>
<var>${pccmocklog}</var>
<arg>cat pccmock.log</arg>
<doc>_This keyword is considered deprecated. Use the
[http://robotframework.org/robotframework/latest/libraries/Process.html|
Process] library instead._</doc>
<status status="PASS" start="2026-04-21T00:47:44.940726" elapsed="0.002707"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:44.943869" level="INFO">cat: pccmock.log: No such file or directory</msg>
<arg>${pccmocklog}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:44.943610" elapsed="0.000305"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:44.944133" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:44.944061" elapsed="0.000139"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-21T00:47:44.944339" elapsed="0.000098"/>
</kw>
<doc>Download pccmock.log and Log its contents.
Compute and Log the diff between expected and actual normalized responses.
Close both HTTP client session and SSH connection to Mininet.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.939748" elapsed="0.004808">AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</kw>
<doc>TCPMD5 user-facing feature system tests, using PCEP.

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

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

Test suite performs basic pcep md5 password authorization test cases:
(Run entire basic PCEP suite without passwords.)
Start pcc-mock (reconnecting mode): 1 pcc, 1 lsp, password set, check pcep-topology stays empty.
Use restconf to change PCEP configuration to use a wrong password, check pcep-topology stays empty.
Change ODL PCEP configuration to use the correct password, check pcep-topology shows the lsp.
Stop pcc-mock, check pcep-topology stays empty.
Start pcc-mock with new password, check pcep-topology stays empty.
Change ODL PCEP configuration to use the correct password, check pcep-topology shows the lsp.
Update the lsp, check a change in pcep-topology.
Change ODL PCEP configuration to not use password, pcep-topology empties, kill pcep-pcc-mock.

Test cases no longer need netconf-connector-ssh, and they include comparison of
pcep-session-state.</doc>
<status status="FAIL" start="2026-04-21T00:47:44.793707" elapsed="0.150918">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
AttributeError: 'NoneType' object has no attribute 'open_sftp_client'</status>
</suite>
<status status="FAIL" start="2026-04-21T00:47:41.415786" elapsed="3.530784"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="392" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="149" skip="0">critical</stat>
<stat pass="0" fail="1" skip="0">local_run</stat>
</tag>
<suite>
<stat name="bgpcep-userfeatures.txt" id="s1" pass="0" fail="392" skip="0">bgpcep-userfeatures.txt</stat>
<stat name="050 Bmp Basic" id="s1-s1" pass="0" fail="4" skip="0">bgpcep-userfeatures.txt.050 Bmp Basic</stat>
<stat name="Pcepuser" id="s1-s2" pass="0" fail="16" skip="0">bgpcep-userfeatures.txt.Pcepuser</stat>
<stat name="Bgp Functional Md5" id="s1-s3" pass="0" fail="2" skip="0">bgpcep-userfeatures.txt.Bgp Functional Md5</stat>
<stat name="Basic" id="s1-s4" pass="0" fail="38" skip="0">bgpcep-userfeatures.txt.Basic</stat>
<stat name="Bgp Ipv6 Basic" id="s1-s5" pass="0" fail="36" skip="0">bgpcep-userfeatures.txt.Bgp Ipv6 Basic</stat>
<stat name="Bgp Llgr Basic" id="s1-s6" pass="0" fail="4" skip="0">bgpcep-userfeatures.txt.Bgp Llgr Basic</stat>
<stat name="Bgp App Peer Basic" id="s1-s7" pass="0" fail="28" skip="0">bgpcep-userfeatures.txt.Bgp App Peer Basic</stat>
<stat name="Ibgp Peers Basic" id="s1-s8" pass="0" fail="36" skip="0">bgpcep-userfeatures.txt.Ibgp Peers Basic</stat>
<stat name="Ebgp Peers Basic" id="s1-s9" pass="0" fail="22" skip="0">bgpcep-userfeatures.txt.Ebgp Peers Basic</stat>
<stat name="010 Bgp Flowspec" id="s1-s10" pass="0" fail="5" skip="0">bgpcep-userfeatures.txt.010 Bgp Flowspec</stat>
<stat name="Ibgp Peer Lsp" id="s1-s11" pass="0" fail="12" skip="0">bgpcep-userfeatures.txt.Ibgp Peer Lsp</stat>
<stat name="010 Bgp Functional L3Vpn" id="s1-s12" pass="0" fail="9" skip="0">bgpcep-userfeatures.txt.010 Bgp Functional L3Vpn</stat>
<stat name="030 Bgp Functional Evpn" id="s1-s13" pass="0" fail="78" skip="0">bgpcep-userfeatures.txt.030 Bgp Functional Evpn</stat>
<stat name="040 Bgp Functional Route Ref" id="s1-s14" pass="0" fail="6" skip="0">bgpcep-userfeatures.txt.040 Bgp Functional Route Ref</stat>
<stat name="020 Bgp Functional Multipath" id="s1-s15" pass="0" fail="4" skip="0">bgpcep-userfeatures.txt.020 Bgp Functional Multipath</stat>
<stat name="060 Bgp Functional Mvpn" id="s1-s16" pass="0" fail="29" skip="0">bgpcep-userfeatures.txt.060 Bgp Functional Mvpn</stat>
<stat name="070 Bgp Functional L3Vpn Mcast" id="s1-s17" pass="0" fail="10" skip="0">bgpcep-userfeatures.txt.070 Bgp Functional L3Vpn Mcast</stat>
<stat name="080 Bgp Functional Rt Constrain" id="s1-s18" pass="0" fail="14" skip="0">bgpcep-userfeatures.txt.080 Bgp Functional Rt Constrain</stat>
<stat name="090 Bgp Functional Rt Constrain Validation" id="s1-s19" pass="0" fail="11" skip="0">bgpcep-userfeatures.txt.090 Bgp Functional Rt Constrain Validation</stat>
<stat name="Bgp Policies Default" id="s1-s20" pass="0" fail="8" skip="0">bgpcep-userfeatures.txt.Bgp Policies Default</stat>
<stat name="Tcpmd5User" id="s1-s21" pass="0" fail="20" skip="0">bgpcep-userfeatures.txt.Tcpmd5User</stat>
</suite>
</statistics>
<errors>
<msg time="2026-04-21T00:47:42.065707" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.Bgp Functional Md5' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.312328" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.313042" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.313588" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.314062" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.319686" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.322445" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.487894" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.Bgp Ipv6 Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.661879" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.Bgp Llgr Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.796368" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.797081" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.797616" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.798070" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.803739" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.806740" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Bgp App Peer Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.951419" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.952171" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.952727" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.953206" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.958985" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.985222" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BgpOperations.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:42.991699" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Ibgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.139421" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.140140" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.140695" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.141198" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.147081" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.149884" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BgpOperations.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.151628" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Ebgp Peers Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.305083" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.010 Bgp Flowspec' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.369670" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPSpeaker.robot' on line 27: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.370365" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.370901" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.371357" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.377057" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.379778" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BgpOperations.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.381380" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Ibgp Peer Lsp' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.505721" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.010 Bgp Functional L3Vpn' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.651714" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.030 Bgp Functional Evpn' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.845588" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.040 Bgp Functional Route Ref' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:43.982822" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.020 Bgp Functional Multipath' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.118844" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.060 Bgp Functional Mvpn' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.255996" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.070 Bgp Functional L3Vpn Mcast' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.384953" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.080 Bgp Functional Rt Constrain' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.523515" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.090 Bgp Functional Rt Constrain Validation' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.667113" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/BGPcliKeywords.robot' on line 15: Suite 'bgpcep-userfeatures.txt.Bgp Policies Default' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.801403" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'bgpcep-userfeatures.txt.Tcpmd5User' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.805407" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'bgpcep-userfeatures.txt.Tcpmd5User' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.805896" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'bgpcep-userfeatures.txt.Tcpmd5User' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.815353" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'bgpcep-userfeatures.txt.Tcpmd5User' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-04-21T00:47:44.817167" level="WARN">Error in file '/w/workspace/bgpcep-csit-1node-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'bgpcep-userfeatures.txt.Tcpmd5User' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
