<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.5 (Python 3.11.10 on linux)" generated="2026-09-26T23:44:03.820679" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-callhome.txt" source="/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/suites/netconf/callhome">
<suite id="s1-s1" name="Callhome" source="/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/suites/netconf/callhome/callhome.robot">
<kw name="Suite Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Install Docker Compose on tools system" owner="NetconfCallHome">
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-09-26T23:44:04.246134" level="INFO">${tools_connection} = 1</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-09-26T23:44:04.245711" elapsed="0.000464"/>
</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-09-26T23:44:04.248295" level="INFO">Length is 0.</msg>
<msg time="2026-09-26T23:44:04.248410" level="INFO">${pwd_length} = 0</msg>
<var>${pwd_length}</var>
<arg>${password}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-09-26T23:44:04.247772" elapsed="0.000665"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Conditionally runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-09-26T23:44:04.248581" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-09-26T23:44:04.249733" level="INFO">Logging into ':22' as 'jenkins'.</msg>
<msg time="2026-09-26T23:44:04.250288" level="FAIL">OSError: [Errno 16] Device or resource busy</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.249476" elapsed="0.003815">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-09-26T23:44:04.253382" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.249095" elapsed="0.004349"/>
</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-09-26T23:44:04.247354" elapsed="0.006214">OSError: [Errno 16] Device or resource busy</status>
</kw>
<msg time="2026-09-26T23:44:04.253616" 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-09-26T23:44:04.246865" elapsed="0.006794"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.246360" elapsed="0.007392">OSError: [Errno 16] Device or resource busy</status>
</kw>
<return>
<value>${tools_connection}</value>
<status status="NOT RUN" start="2026-09-26T23:44:04.253811" elapsed="0.000025"/>
</return>
<var>${netopeer_conn_id}</var>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.245275" elapsed="0.008642">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netopeer_conn_id}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.254097" elapsed="0.000021"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<arg>sudo curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.254249" elapsed="0.000019"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${output}</var>
<arg>30s</arg>
<arg>2s</arg>
<arg>SSHLibrary.Read_Until_Prompt</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.254850" elapsed="0.000021"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>sudo chmod +x /usr/local/bin/docker-compose</arg>
<arg>return_stdout=True</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="NOT RUN" start="2026-09-26T23:44:04.255041" elapsed="0.000020"/>
</kw>
<doc>Install docker-compose on tools system.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.243813" elapsed="0.011343">OSError: [Errno 16] Device or resource busy</status>
</kw>
<kw name="Pull Netopeer2 Docker Image" owner="NetconfCallHome">
<doc>Pulls the netopeer image from the docker repository.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.255305" elapsed="0.000035"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/docker-compose.yaml</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.255496" elapsed="0.000019"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/init_configuration.sh</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.255657" elapsed="0.000018"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<arg>sed -i -e 's/ODL_SYSTEM_IP/${ODL_SYSTEM_IP}/g' docker-compose.yaml</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.255828" elapsed="0.000019"/>
</kw>
<kw name="Set_Variable_If_At_Least_Sulfur" owner="CompareStream">
<var>${netconf_cl_ssh_port}</var>
<arg>4334</arg>
<arg>6666</arg>
<doc>Compare sulfur to vanadium and return ${value_if_true} if vanadium is at least sulfur, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.258079" elapsed="0.000025"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<arg>sed -i -e 's/NETCONF_CH_SSH/${netconf_cl_ssh_port}/g' docker-compose.yaml</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.258272" elapsed="0.000020"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<arg>sed -i -e 's/NETCONF_CH_TLS/4335/g' docker-compose.yaml</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.258473" elapsed="0.000019"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${substring1}</var>
<arg>"connection-status":"connected"</arg>
<arg>"netconf-node-topology:connection-status":"connected"</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.260709" elapsed="0.000026"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${substring2}</var>
<arg>"node-id":"netopeer2"</arg>
<doc>Returns the given values which can then be assigned to a variable.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.260923" elapsed="0.000019"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${substring3}</var>
<arg>"available-capabilities"</arg>
<arg>"netconf-node-topology:available-capabilities"</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.263175" elapsed="0.000024"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${netconf_mount_expected_values}</var>
<arg>${substring1}</arg>
<arg>${substring2}</arg>
<arg>${substring3}</arg>
<doc>Creates and returns a list containing the given items.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.263366" elapsed="0.000035"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_mount_expected_values}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.263577" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${CREATE_GLOBAL_CREDENTIALS_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/create_global_credentials.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.263758" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/create_ssh_device.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.263942" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${CREATE_SSH_DEVICE_REQ_HOST_KEY_ONLY}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/create_device_hostkey_only.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.264120" elapsed="0.000017"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${CREATE_TLS_DEVICE_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/create_tls_device.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.264299" elapsed="0.000017"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ADD_KEYSTORE_ENTRY_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/add_keystore_entry.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.264505" elapsed="0.000019"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ADD_PRIVATE_KEY_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/add_private_key.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.264684" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${ADD_TRUSTED_CERTIFICATE}</arg>
<arg>/w/workspace/netconf-csit-1node-callhome-only-vanadium/test/csit/libraries/../variables/netconf/callhome/json/add_trusted_certificate.json</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.264861" elapsed="0.000018"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./incorrect_ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.265041" elapsed="0.000019"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${incorrect_public_key}</var>
<arg>awk '{print $2}' incorrect_ssh_host_rsa_key.pub</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.265213" elapsed="0.000018"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${INCORRECT_PUB_KEY}</arg>
<arg>${incorrect_public_key}</arg>
<doc>Makes the variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-09-26T23:44:04.265420" elapsed="0.000019"/>
</kw>
<doc>Get the suite ready for callhome test cases.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.243507" elapsed="0.022015">OSError: [Errno 16] Device or resource busy</status>
</kw>
<test id="s1-s1-t1" name="CallHome over SSH with correct device credentials" line="17">
<doc>Correct credentials should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.265597" elapsed="0.000550">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t2" name="CallHome over SSH with incorrect device credentials" line="34">
<doc>Correct credentials should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.266466" elapsed="0.000453">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t3" name="CallHome over SSH with correct global credentials" line="53">
<doc>CallHome SSH device registered with global credentials should result to successful mount.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.267161" elapsed="0.000579">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t4" name="CallHome over SSH with incorrect global credentials" line="71">
<doc>CallHome SSH device registered with wrong global credentials should fail to mount.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.268039" elapsed="0.000534">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t5" name="CallHome with Incorrect Node-id" line="91">
<doc>CallHome from device that does not have an entry in per-device credential with result to mount point failure.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.268850" elapsed="0.000496">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t6" name="CallHome with Rogue Devices" line="111">
<doc>A Rogue Device will fail to callhome and wont be able to mount because the keys are not added in whitelist.
FAILED_NOT_ALLOWED should be the device status.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.269701" elapsed="0.000540">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<test id="s1-s1-t7" name="CallHome over TLS with correct certificate and key" line="131">
<doc>Using correct certificate and key pair should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.270627" elapsed="0.000586">Parent suite setup failed:
OSError: [Errno 16] Device or resource busy</status>
</test>
<kw name="Suite Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Uninstall Docker Compose on tools system" owner="NetconfCallHome">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-09-26T23:44:04.272803" level="INFO">Executing command 'pip uninstall docker-compose'.</msg>
<msg time="2026-09-26T23:44:04.272953" level="INFO">${stdout} = None</msg>
<msg time="2026-09-26T23:44:04.273026" level="INFO">${stderr} = None</msg>
<msg time="2026-09-26T23:44:04.273067" level="INFO">${rc} = None</msg>
<msg time="2026-09-26T23:44:04.273106" level="FAIL">Connection not open</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>pip uninstall docker-compose</arg>
<arg>return_stdout=True</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-09-26T23:44:04.272583" elapsed="0.000876">Connection not open</status>
</kw>
<doc>Uninstall docker-compose on tools system</doc>
<status status="FAIL" start="2026-09-26T23:44:04.272280" elapsed="0.001302">Connection not open</status>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-09-26T23:44:04.273779" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects </doc>
<status status="PASS" start="2026-09-26T23:44:04.273702" elapsed="0.000128"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-09-26T23:44:04.273947" elapsed="0.000094"/>
</kw>
<doc>Tearing down the setup.</doc>
<status status="FAIL" start="2026-09-26T23:44:04.272078" elapsed="0.002052">Connection not open</status>
</kw>
<doc>Test suite to verify callhome functionality over SSH transport protocol. Registration in OpenDaylight
Controller happens via restconf interface. Netopeer2-server docker container plays a role of the
netconf device with call-home feature. Docker-compose file is used to configure netopeer2 docker
container(netconf configuration templates, host-key).</doc>
<status status="FAIL" start="2026-09-26T23:44:03.862765" elapsed="0.411425">Suite setup failed:
OSError: [Errno 16] Device or resource busy

Also suite teardown failed:
Connection not open</status>
</suite>
<status status="FAIL" start="2026-09-26T23:44:03.822161" elapsed="0.453118"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="7" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="netconf-callhome.txt" id="s1" pass="0" fail="7" skip="0">netconf-callhome.txt</stat>
<stat name="Callhome" id="s1-s1" pass="0" fail="7" skip="0">netconf-callhome.txt.Callhome</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
