<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-25T23:13:52.125498" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-gate-callhome.txt" source="/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/suites/netconf/callhome">
<suite id="s1-s1" name="Callhome" source="/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/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-04-25T23:13:52.631245" 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-04-25T23:13:52.630769" elapsed="0.000516"/>
</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-25T23:13:52.633592" level="INFO">Length is 0.</msg>
<msg time="2026-04-25T23:13:52.633687" 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-25T23:13:52.633134" elapsed="0.000583"/>
</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-25T23:13:52.633864" elapsed="0.000376"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-04-25T23:13:52.635266" level="INFO">Logging into '10.30.171.238:22' as 'jenkins'.</msg>
<msg time="2026-04-25T23:13:53.325582" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-171-generic x86_64)

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

 System information as of Sat Apr 25 23:13:52 UTC 2026

  System load:  0.0                Processes:             104
  Usage of /:   20.6% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.171.238
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


[?2004h[jenkins@releng-51161-87-1-docker-0 ~]&gt;</msg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Logs into the SSH server using key-based authentication.</doc>
<status status="PASS" start="2026-04-25T23:13:52.634786" elapsed="0.690970"/>
</kw>
<msg time="2026-04-25T23:13:53.325866" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>SSHLibrary.Login With Public Key</arg>
<arg>${user}</arg>
<arg>${USER_HOME}/.ssh/${SSH_KEY}</arg>
<arg>${KEYFILE_PASS}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:13:52.634397" elapsed="0.691569"/>
</kw>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>On active SSH session: if given non-empty password, do Login, else do Login With Public Key.</doc>
<status status="PASS" start="2026-04-25T23:13:52.632512" elapsed="0.693588"/>
</kw>
<msg time="2026-04-25T23:13:53.326157" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Flexible SSH Login</arg>
<arg>user=${user}</arg>
<arg>password=${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:13:52.632040" elapsed="0.694171"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-04-25T23:13:52.631475" elapsed="0.694825"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-04-25T23:13:53.326372" elapsed="0.000056"/>
</return>
<msg time="2026-04-25T23:13:53.326645" level="INFO">${netopeer_conn_id} = 1</msg>
<var>${netopeer_conn_id}</var>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-04-25T23:13:52.630304" elapsed="0.696369"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:13:53.327386" level="INFO">${netopeer_conn_id} = 1</msg>
<arg>${netopeer_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:13:53.326904" elapsed="0.000528"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-04-25T23:13:53.330222" level="INFO">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</msg>
<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="PASS" start="2026-04-25T23:13:53.327603" elapsed="0.002681"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-04-25T23:13:53.952020" level="INFO">[?2004l  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100 8053k  100 8053k    0     0  13.3M      0 --:--:-- --:--:-- --:--:-- 26.7M
[?2004h[jenkins@releng-51161-87-1-docker-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-04-25T23:13:53.331457" elapsed="0.620795"/>
</kw>
<msg time="2026-04-25T23:13:53.952486" level="INFO">${output} = [?2004l  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     ...</msg>
<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="PASS" start="2026-04-25T23:13:53.330958" elapsed="0.621574"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:13:53.953119" level="INFO">Executing command 'sudo chmod +x /usr/local/bin/docker-compose'.</msg>
<msg time="2026-04-25T23:13:53.975947" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:13:53.976237" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:13:53.976363" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:13:53.976465" level="INFO">${rc} = 0</msg>
<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="PASS" start="2026-04-25T23:13:53.952821" elapsed="0.023695"/>
</kw>
<doc>Install docker-compose on tools system.</doc>
<status status="PASS" start="2026-04-25T23:13:52.626892" elapsed="1.350075"/>
</kw>
<kw name="Pull Netopeer2 Docker Image" owner="NetconfCallHome">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:13:53.978379" level="INFO">Executing command 'docker pull sysrepo/sysrepo-netopeer2:latest'.</msg>
<msg time="2026-04-25T23:14:04.061436" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:04.061889" level="INFO">${stdout} = latest: Pulling from sysrepo/sysrepo-netopeer2
6154df8ff988: Pulling fs layer
d51af753c3d3: Pulling fs layer
fee5db0ff82f: Pulling fs layer
fc878cd0a91c: Pulling fs layer
399fb1102f3f: Pulling fs laye...</msg>
<msg time="2026-04-25T23:14:04.061997" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:04.062089" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker pull sysrepo/sysrepo-netopeer2:latest</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="PASS" start="2026-04-25T23:13:53.977987" elapsed="10.084186"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.063148" level="INFO">Executing command 'docker images'.</msg>
<msg time="2026-04-25T23:14:04.172284" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:04.172592" level="INFO">${stdout} = IMAGE                              ID             DISK USAGE   CONTENT SIZE   EXTRA
sysrepo/sysrepo-netopeer2:latest   36cc1d841c97        914MB          232MB        </msg>
<msg time="2026-04-25T23:14:04.172699" level="INFO">${stderr} = WARNING: This output is designed for human readability. For machine-readable output, please use --format.</msg>
<msg time="2026-04-25T23:14:04.172790" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker images</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="PASS" start="2026-04-25T23:14:04.062687" elapsed="0.110155"/>
</kw>
<doc>Pulls the netopeer image from the docker repository.</doc>
<status status="PASS" start="2026-04-25T23:13:53.977413" elapsed="10.195620"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.223400" level="INFO">[chan 4] Opened sftp connection (server version 3)</msg>
<msg time="2026-04-25T23:14:04.232274" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/docker-compose.yaml' -&gt; '/home/jenkins//docker-compose.yaml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/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="PASS" start="2026-04-25T23:14:04.173336" elapsed="0.059075"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.239675" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/init_configuration.sh' -&gt; '/home/jenkins//init_configuration.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/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="PASS" start="2026-04-25T23:14:04.232785" elapsed="0.006985"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.240187" level="INFO">Executing command 'sed -i -e 's/ODL_SYSTEM_IP/10.30.170.71/g' docker-compose.yaml'.</msg>
<msg time="2026-04-25T23:14:04.252700" level="INFO">Command exited with return code 0.</msg>
<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="PASS" start="2026-04-25T23:14:04.239976" elapsed="0.012859"/>
</kw>
<kw name="Set_Variable_If_At_Least_Sulfur" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:14:04.271982" elapsed="0.000472"/>
</kw>
<msg time="2026-04-25T23:14:04.272509" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.271633" elapsed="0.000958"/>
</kw>
<arg>sulfur</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to titanium and return 4334 if titanium is at least ${lower_bound},
return 6666 otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.271255" elapsed="0.001417"/>
</kw>
<msg time="2026-04-25T23:14:04.272715" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>sulfur</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.264136" elapsed="0.008624"/>
</kw>
<msg time="2026-04-25T23:14:04.272871" level="INFO">${netconf_cl_ssh_port} = 4334</msg>
<var>${netconf_cl_ssh_port}</var>
<arg>4334</arg>
<arg>6666</arg>
<doc>Compare sulfur to titanium and return ${value_if_true} if titanium is at least sulfur, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.263840" elapsed="0.009056"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.273172" level="INFO">Executing command 'sed -i -e 's/NETCONF_CH_SSH/4334/g' docker-compose.yaml'.</msg>
<msg time="2026-04-25T23:14:04.302861" level="INFO">Command exited with return code 0.</msg>
<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="PASS" start="2026-04-25T23:14:04.273032" elapsed="0.029962"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.303568" level="INFO">Executing command 'sed -i -e 's/NETCONF_CH_TLS/4335/g' docker-compose.yaml'.</msg>
<msg time="2026-04-25T23:14:04.351672" level="INFO">Command exited with return code 0.</msg>
<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="PASS" start="2026-04-25T23:14:04.303310" elapsed="0.048540"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:14:04.375052" elapsed="0.000604"/>
</kw>
<msg time="2026-04-25T23:14:04.375727" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.374599" elapsed="0.001201"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to titanium and return "connection-status":"connected" if titanium is at least ${lower_bound},
return "netconf-node-topology:connection-status":"connected" otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.374154" elapsed="0.001836"/>
</kw>
<msg time="2026-04-25T23:14:04.376051" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.364609" elapsed="0.011502"/>
</kw>
<msg time="2026-04-25T23:14:04.376277" level="INFO">${substring1} = "connection-status":"connected"</msg>
<var>${substring1}</var>
<arg>"connection-status":"connected"</arg>
<arg>"netconf-node-topology:connection-status":"connected"</arg>
<doc>Compare scandium to titanium and return ${value_if_true} if titanium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.364235" elapsed="0.012076"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.376886" level="INFO">${substring2} = "node-id":"netopeer2"</msg>
<var>${substring2}</var>
<arg>"node-id":"netopeer2"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-25T23:14:04.376519" elapsed="0.000401"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-25T23:14:04.392179" elapsed="0.000462"/>
</kw>
<msg time="2026-04-25T23:14:04.392693" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.391841" elapsed="0.000903"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to titanium and return "available-capabilities" if titanium is at least ${lower_bound},
return "netconf-node-topology:available-capabilities" otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.391511" elapsed="0.001307"/>
</kw>
<msg time="2026-04-25T23:14:04.392860" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-25T23:14:04.384617" elapsed="0.008286"/>
</kw>
<msg time="2026-04-25T23:14:04.393006" level="INFO">${substring3} = "available-capabilities"</msg>
<var>${substring3}</var>
<arg>"available-capabilities"</arg>
<arg>"netconf-node-topology:available-capabilities"</arg>
<doc>Compare scandium to titanium and return ${value_if_true} if titanium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-25T23:14:04.384347" elapsed="0.008683"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.393544" level="INFO">${netconf_mount_expected_values} = ['"connection-status":"connected"', '"node-id":"netopeer2"', '"available-capabilities"']</msg>
<var>${netconf_mount_expected_values}</var>
<arg>${substring1}</arg>
<arg>${substring2}</arg>
<arg>${substring3}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-25T23:14:04.393173" elapsed="0.000399"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.394063" level="INFO">${netconf_mount_expected_values} = ['"connection-status":"connected"', '"node-id":"netopeer2"', '"available-capabilities"']</msg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.393730" elapsed="0.000374"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.397499" level="INFO">${CREATE_GLOBAL_CREDENTIALS_REQ} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_global_credentials.json</msg>
<arg>${CREATE_GLOBAL_CREDENTIALS_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_global_credentials.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.394249" elapsed="0.003311"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.401132" level="INFO">${CREATE_SSH_DEVICE_REQ} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_ssh_device.json</msg>
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_ssh_device.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.397714" elapsed="0.003464"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.404293" level="INFO">${CREATE_SSH_DEVICE_REQ_HOST_KEY_ONLY} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_device_hostkey_only.json</msg>
<arg>${CREATE_SSH_DEVICE_REQ_HOST_KEY_ONLY}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_device_hostkey_only.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.401332" elapsed="0.003007"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.408124" level="INFO">${CREATE_TLS_DEVICE_REQ} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_tls_device.json</msg>
<arg>${CREATE_TLS_DEVICE_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/create_tls_device.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.404541" elapsed="0.003629"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.411734" level="INFO">${ADD_KEYSTORE_ENTRY_REQ} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_keystore_entry.json</msg>
<arg>${ADD_KEYSTORE_ENTRY_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_keystore_entry.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.408323" elapsed="0.003457"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.415601" level="INFO">${ADD_PRIVATE_KEY_REQ} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_private_key.json</msg>
<arg>${ADD_PRIVATE_KEY_REQ}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_private_key.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.411932" elapsed="0.003754"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.419203" level="INFO">${ADD_TRUSTED_CERTIFICATE} = /w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_trusted_certificate.json</msg>
<arg>${ADD_TRUSTED_CERTIFICATE}</arg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/json/add_trusted_certificate.json</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.415838" elapsed="0.003411"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.419490" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./incorrect_ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:04.666349" level="INFO">Command exited with return code 0.</msg>
<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="PASS" start="2026-04-25T23:14:04.419387" elapsed="0.247217"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.667375" level="INFO">Executing command 'awk '{print $2}' incorrect_ssh_host_rsa_key.pub'.</msg>
<msg time="2026-04-25T23:14:04.723462" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:04.723880" level="INFO">${incorrect_public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDGXEGlqDtH4DXfEZugX5Y2VLM2Oiy4f+mVnckFI2BSa/HsKJKsv/knY6ryc6livTke/+FNpX9eNyGxqG6kH8ivsnqOnk2TLuvWkrYuoYLRebMC2qGT7B0/GbieGh53mNN+api1zjGvzxofxEMkKwWMAsJj2BGV5CuhwUePwOeG...</msg>
<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="PASS" start="2026-04-25T23:14:04.667066" elapsed="0.056879"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.731032" level="INFO">${INCORRECT_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDGXEGlqDtH4DXfEZugX5Y2VLM2Oiy4f+mVnckFI2BSa/HsKJKsv/knY6ryc6livTke/+FNpX9eNyGxqG6kH8ivsnqOnk2TLuvWkrYuoYLRebMC2qGT7B0/GbieGh53mNN+api1zjGvzxofxEMkKwWMAsJj2BGV5CuhwUePwOeG...</msg>
<arg>${INCORRECT_PUB_KEY}</arg>
<arg>${incorrect_public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-25T23:14:04.724428" elapsed="0.006673"/>
</kw>
<doc>Get the suite ready for callhome test cases.</doc>
<status status="PASS" start="2026-04-25T23:13:52.626396" elapsed="12.104804"/>
</kw>
<test id="s1-s1-t1" name="CallHome over SSH with correct device credentials" line="17">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:04.733381" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d925787290&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:04.732988" elapsed="0.000711"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.734040" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:04.775216" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:04.733904" elapsed="0.041446"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.775937" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:04.908318" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:04.775716" elapsed="0.132888"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:04.909386" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:04.955071" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:04.955334" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQD3zWe7j2J15X722rc7c7A/YjR4vt9bflh08ne8Isqo1ExZ5igDR3+Z9gk96XKr7mX2pm0lw/QNtnEmpvbX66kFaM33C4W+n5xZSZkMuepaxzMWMcOAfrgKsnFreIwy4E13txLGoIkClPdIy28fk863h7wyM6f0ZQRkJ5e4Sij3...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:04.909069" elapsed="0.046324"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:04.964340" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQD3zWe7j2J15X722rc7c7A/YjR4vt9bflh08ne8Isqo1ExZ5igDR3+Z9gk96XKr7mX2pm0lw/QNtnEmpvbX66kFaM33C4W+n5xZSZkMuepaxzMWMcOAfrgKsnFreIwy4E13txLGoIkClPdIy28fk863h7wyM6f0ZQRkJ5e4Sij3...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:04.955866" elapsed="0.008523"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:04.732603" elapsed="0.231862"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:05.003204" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:04.965018" elapsed="0.038330"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:05.012110" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:05.003737" elapsed="0.008458"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:04.964712" elapsed="0.047575"/>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<if>
<branch type="IF" condition="'${username}' == '${EMPTY}' or '${password}' == '${EMPTY}'">
<kw name="Get create device request without credentials template" owner="NetconfCallHome">
<status status="NOT RUN" start="2026-04-25T23:14:05.018067" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:14:05.013304" elapsed="0.004844"/>
</branch>
<branch type="ELSE">
<kw name="Get create device request template" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:05.019029" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:05.019237" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<var>${template}</var>
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:05.018796" elapsed="0.000479"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:05.019995" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<arg>${template}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:05.019491" elapsed="0.000609"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:05.018397" elapsed="0.001788"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:05.018193" elapsed="0.002027"/>
</branch>
<status status="PASS" start="2026-04-25T23:14:05.013186" elapsed="0.007068"/>
</if>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:05.020836" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
      ...</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{device_name}</arg>
<arg>${device_name}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:05.020449" elapsed="0.000426"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:05.021448" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "{password}" ]
          },...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:05.021094" elapsed="0.000392"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:05.022033" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
          },
     ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:05.021712" elapsed="0.000361"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:05.022637" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
          },
     ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{hostkey}</arg>
<arg>${hostkey}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:05.022273" elapsed="0.000402"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:05.027613" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:05.229786" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:05.632809" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:05.635287" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:05.022864" elapsed="0.621958">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:05.645086" elapsed="0.000029"/>
</kw>
<arg>netopeer2</arg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>root</arg>
<arg>root</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="FAIL" start="2026-04-25T23:14:05.012698" elapsed="0.632543">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:05.645415" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>CONNECTED</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:05.645648" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:05.645872" elapsed="0.000023"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:05.646836" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:05.915041" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:05.915377" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:05.915479" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:05.915615" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:05.646628" elapsed="0.269043"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:05.916802" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:05.916081" elapsed="0.000822"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:05.917683" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:06.216703" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:06.217000" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:06.217053" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:06.217103" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:05.917268" elapsed="0.299865"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:06.217805" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:06.282622" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:06.282756" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:06.282806" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:06.282852" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:06.217469" elapsed="0.065409"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:06.283219" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:06.330624" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:06.283099" elapsed="0.047594"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:06.334313" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.535897" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.937929" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.940576" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:06.940698" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:06.330863" elapsed="0.614069">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:06.948692" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:07.150432" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:07.552613" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:07.554989" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:07.555106" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:06.945269" elapsed="0.613981">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:05.646259" elapsed="1.913235">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Correct credentials should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-04-25T23:14:04.731312" elapsed="2.828386">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t2" name="CallHome over SSH with incorrect device credentials" line="34">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:07.562673" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d9255caa10&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:07.562025" elapsed="0.000944"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:07.563322" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:07.576076" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:07.563177" elapsed="0.013034"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:07.576803" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:07.981661" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:07.576578" elapsed="0.405273"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:07.982604" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:08.030148" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:08.030397" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDMiyuU+JgZENoTbzZ1Do4whNiD8VoPLc4qqFF97ip6BB5jUJND1RMM51I8puWFoDPvB57bCrhJHgL3stFQCYpMcJ6XeSvgbpMntAaz5tYE6qq/6VNDeHN35f/xrfBsCy26E1R5lHXk6jsk92sx6R4AnaD/q7I/DlD6S2TffIxi...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:07.982288" elapsed="0.048166"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:08.037937" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDMiyuU+JgZENoTbzZ1Do4whNiD8VoPLc4qqFF97ip6BB5jUJND1RMM51I8puWFoDPvB57bCrhJHgL3stFQCYpMcJ6XeSvgbpMntAaz5tYE6qq/6VNDeHN35f/xrfBsCy26E1R5lHXk6jsk92sx6R4AnaD/q7I/DlD6S2TffIxi...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:08.030913" elapsed="0.007092"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:07.561572" elapsed="0.476527"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:08.077947" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:08.038785" elapsed="0.039296"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:08.084975" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:08.078395" elapsed="0.006660"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:08.038367" elapsed="0.046776"/>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<if>
<branch type="IF" condition="'${username}' == '${EMPTY}' or '${password}' == '${EMPTY}'">
<kw name="Get create device request without credentials template" owner="NetconfCallHome">
<status status="NOT RUN" start="2026-04-25T23:14:08.090761" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:14:08.086034" elapsed="0.004801"/>
</branch>
<branch type="ELSE">
<kw name="Get create device request template" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:08.091692" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:08.091883" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<var>${template}</var>
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:08.091461" elapsed="0.000525"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:08.092680" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<arg>${template}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:08.092201" elapsed="0.000541"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:08.091074" elapsed="0.001744"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:08.090877" elapsed="0.001975"/>
</branch>
<status status="PASS" start="2026-04-25T23:14:08.085997" elapsed="0.006888"/>
</if>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:08.093416" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
      ...</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{device_name}</arg>
<arg>${device_name}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:08.093074" elapsed="0.000380"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:08.093998" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "{password}" ]
          },...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:08.093678" elapsed="0.000358"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:08.094570" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "incorrect" ]
          },
...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:08.094232" elapsed="0.000377"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:08.095204" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "incorrect" ]
          },
...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{hostkey}</arg>
<arg>${hostkey}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:08.094807" elapsed="0.000450"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:08.098560" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:08.299920" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:08.702151" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:08.704588" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:08.095472" elapsed="0.614273">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:08.710221" elapsed="0.000057"/>
</kw>
<arg>netopeer2</arg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>root</arg>
<arg>incorrect</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="FAIL" start="2026-04-25T23:14:08.085500" elapsed="0.625011">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:08.710905" elapsed="0.000047"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>FAILED_AUTH_FAILURE</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:08.711319" elapsed="0.000047"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Run Keyword And Expect Error</arg>
<arg>*</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:08.711723" elapsed="0.000046"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:08.713754" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:08.970228" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:08.970667" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:08.970770" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:08.970862" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:08.713243" elapsed="0.257670"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:08.972202" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:08.971483" elapsed="0.000817"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:08.973046" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:09.281066" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:09.281478" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:09.281611" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:09.281706" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:08.972652" elapsed="0.309108"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:09.282701" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:09.345791" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:09.346163" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:09.346279" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:09.346387" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:09.282222" elapsed="0.064226"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:09.347199" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:09.399170" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:09.346936" elapsed="0.052371"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:09.404060" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:09.606059" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:10.008260" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:10.010939" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:10.011050" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:09.399662" elapsed="0.617350">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:10.021029" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:10.222336" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:10.624543" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:10.626357" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:10.626451" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:10.017627" elapsed="0.612682">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:08.712482" elapsed="1.918104">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Correct credentials should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-04-25T23:14:07.560288" elapsed="3.070415">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t3" name="CallHome over SSH with correct global credentials" line="53">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:10.633254" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d92567ab50&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:10.632818" elapsed="0.000735"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:10.633986" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:10.647957" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:10.633832" elapsed="0.014282"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:10.648790" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:11.023221" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:10.648558" elapsed="0.374889"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:11.024379" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:11.071106" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:11.071360" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDUblYs5O1rardQ97L1e6NF+18pFypEbgVnixILbSW0qtjWXfTSKRjZU1/FEeiABTcD51fWKPfxCRV3vq3GDCyLyRGvo2w9UkYBxCbuHLmO5RCQduUA/Rfamau1XTBWPZ74m+Ywy5OMaMwjDMsgdYYXRZYnZ5bTzzltUeKhWpc/...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:11.023998" elapsed="0.047424"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:11.081721" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQDUblYs5O1rardQ97L1e6NF+18pFypEbgVnixILbSW0qtjWXfTSKRjZU1/FEeiABTcD51fWKPfxCRV3vq3GDCyLyRGvo2w9UkYBxCbuHLmO5RCQduUA/Rfamau1XTBWPZ74m+Ywy5OMaMwjDMsgdYYXRZYnZ5bTzzltUeKhWpc/...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:11.071853" elapsed="0.009942"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:10.632318" elapsed="0.449574"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:11.119050" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:11.082591" elapsed="0.036605"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:11.127487" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:11.119580" elapsed="0.008025"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:11.082171" elapsed="0.045539"/>
</kw>
<kw name="Register global credentials for SSH call-home devices" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:11.128842" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_global_credentials.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_global_credentials.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:11.129054" level="INFO">${template} = {
  "credentials": {
    "username": "{username}",
    "passwords": [ "{password}" ]
  }
}
</msg>
<var>${template}</var>
<arg>${CREATE_GLOBAL_CREDENTIALS_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:11.128612" elapsed="0.000479"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:11.129822" level="INFO">${body} = {
  "credentials": {
    "username": "root",
    "passwords": [ "{password}" ]
  }
}
</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:11.129307" elapsed="0.000556"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:11.130386" level="INFO">${body} = {
  "credentials": {
    "username": "root",
    "passwords": [ "root" ]
  }
}
</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:11.130067" elapsed="0.000355"/>
</kw>
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:11.134207" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:11.335838" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:11.738433" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:11.740745" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${global_config_url}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:11.130635" elapsed="0.614693">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:11.745713" elapsed="0.000041"/>
</kw>
<arg>root</arg>
<arg>root</arg>
<doc>Set global credentials for SSH call-home devices</doc>
<status status="FAIL" start="2026-04-25T23:14:11.128027" elapsed="0.617904">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<arg>netopeer2</arg>
<arg>${NETOPEER_PUB_KEY}</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="NOT RUN" start="2026-04-25T23:14:11.746395" elapsed="0.000047"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:11.746669" elapsed="0.000030"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>CONNECTED</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:11.746927" elapsed="0.000030"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:11.747162" elapsed="0.000028"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:11.748386" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:12.015424" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:12.015834" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:12.015935" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:12.016055" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:11.748125" elapsed="0.267987"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:12.017292" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:12.016600" elapsed="0.000786"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:12.018120" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:12.314614" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:12.314908" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:12.315010" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:12.315105" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:12.017739" elapsed="0.297418"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:12.315983" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:12.373766" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:12.374076" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:12.374176" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:12.374265" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:12.315572" elapsed="0.058744"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:12.375010" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:12.426689" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:12.374756" elapsed="0.052072"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:12.432442" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:12.634279" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:13.036405" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:13.038697" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:13.038812" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:12.427147" elapsed="0.616731">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:13.048385" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.249905" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.652105" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.654037" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:13.654144" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:13.044404" elapsed="0.614758">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:11.747681" elapsed="1.911872">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>CallHome SSH device registered with global credentials should result to successful mount.</doc>
<status status="FAIL" start="2026-04-25T23:14:10.631218" elapsed="3.028495">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t4" name="CallHome over SSH with incorrect global credentials" line="71">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:13.661636" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d925681890&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:13.661256" elapsed="0.000547"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:13.662054" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:13.674805" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:13.661950" elapsed="0.012995"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:13.675499" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:13.817816" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:13.675267" elapsed="0.142684"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:13.818497" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:13.871098" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:13.871381" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCVZdDj5VWGlerYoSiEZrs9nHBRfCMXY+MMTjwhYXOZarOsjdeknEMMJiBHAoh5JHt1a3NPVO7U8yjw1e/GRdteJLgRYggaExSFmVvTj4Haz+PWCHzK+r6EmV4AkU25un7eMQNMhG+0g0TNxoY+8u+j9ZUP3J+9ZEujgOxjhWJg...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:13.818270" elapsed="0.053191"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:13.879584" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCVZdDj5VWGlerYoSiEZrs9nHBRfCMXY+MMTjwhYXOZarOsjdeknEMMJiBHAoh5JHt1a3NPVO7U8yjw1e/GRdteJLgRYggaExSFmVvTj4Haz+PWCHzK+r6EmV4AkU25un7eMQNMhG+0g0TNxoY+8u+j9ZUP3J+9ZEujgOxjhWJg...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:13.871986" elapsed="0.007666"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:13.660968" elapsed="0.218772"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:13.918119" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:13.880359" elapsed="0.037893"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:13.926349" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:13.918698" elapsed="0.007732"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:13.879982" elapsed="0.046535"/>
</kw>
<kw name="Register global credentials for SSH call-home devices" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:13.927431" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_global_credentials.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_global_credentials.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:13.927639" level="INFO">${template} = {
  "credentials": {
    "username": "{username}",
    "passwords": [ "{password}" ]
  }
}
</msg>
<var>${template}</var>
<arg>${CREATE_GLOBAL_CREDENTIALS_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:13.927222" elapsed="0.000454"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:13.928209" level="INFO">${body} = {
  "credentials": {
    "username": "root",
    "passwords": [ "{password}" ]
  }
}
</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:13.927874" elapsed="0.000371"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:13.928800" level="INFO">${body} = {
  "credentials": {
    "username": "root",
    "passwords": [ "incorrect" ]
  }
}
</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:13.928442" elapsed="0.000394"/>
</kw>
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:13.932150" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:14.133630" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:14.535686" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:14.537472" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${global_config_url}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:13.929022" elapsed="0.611653">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:14.541020" elapsed="0.000040"/>
</kw>
<arg>root</arg>
<arg>incorrect</arg>
<doc>Set global credentials for SSH call-home devices</doc>
<status status="FAIL" start="2026-04-25T23:14:13.926793" elapsed="0.614417">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<arg>netopeer2</arg>
<arg>${NETOPEER_PUB_KEY}</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="NOT RUN" start="2026-04-25T23:14:14.541662" elapsed="0.000039"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:14.541935" elapsed="0.000032"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>FAILED_AUTH_FAILURE</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:14.542196" elapsed="0.000028"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Run Keyword And Expect Error</arg>
<arg>*</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:14.542424" elapsed="0.000028"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:14.543685" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:14.809737" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:14.810148" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:14.810265" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:14.810360" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:14.543386" elapsed="0.267061"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:14.811740" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:14.811047" elapsed="0.000790"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:14.812552" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:15.116308" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:15.116720" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:15.116826" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:15.116921" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:14.812155" elapsed="0.304821"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:15.117886" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:15.173353" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:15.173687" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:15.173799" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:15.173899" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:15.117414" elapsed="0.056541"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:15.174619" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:15.226458" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:15.174342" elapsed="0.052323"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:15.231614" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.433176" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.835408" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.837812" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:15.837922" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:15.227046" elapsed="0.615840">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:15.846745" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.048022" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.450495" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.453102" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:16.453216" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:15.843337" elapsed="0.615530">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:14.542928" elapsed="1.916338">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>CallHome SSH device registered with wrong global credentials should fail to mount.</doc>
<status status="FAIL" start="2026-04-25T23:14:13.660291" elapsed="2.799157">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t5" name="CallHome with Incorrect Node-id" line="91">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:16.462890" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d92575e890&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:16.462580" elapsed="0.000490"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:16.463322" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:16.475834" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:16.463218" elapsed="0.012708"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:16.476280" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:16.759637" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:16.476132" elapsed="0.283702"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:16.760550" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:16.807816" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:16.808149" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCmRBF5fJLiRM8dcTE9uAe/kivMldTy3rNA6Bj5MmZQLPgAWRvcYYZNEJuCyzjMp9VW4WAP6jOzU6kfu9L3XPyYEp/PrPlcWaXSvKy0i5Dn/i6GOtdbuwqlUwUb92JjkIE35UvD/Gw0EFR91qUoWuESOX0ETPRJ09qG9dh0H66o...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:16.760246" elapsed="0.047969"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:16.816438" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCmRBF5fJLiRM8dcTE9uAe/kivMldTy3rNA6Bj5MmZQLPgAWRvcYYZNEJuCyzjMp9VW4WAP6jOzU6kfu9L3XPyYEp/PrPlcWaXSvKy0i5Dn/i6GOtdbuwqlUwUb92JjkIE35UvD/Gw0EFR91qUoWuESOX0ETPRJ09qG9dh0H66o...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:16.808712" elapsed="0.007793"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:16.461973" elapsed="0.354644"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:16.850559" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:16.817269" elapsed="0.033373"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:16.855399" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:16.850840" elapsed="0.004638"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:16.816878" elapsed="0.038714"/>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<if>
<branch type="IF" condition="'${username}' == '${EMPTY}' or '${password}' == '${EMPTY}'">
<kw name="Get create device request without credentials template" owner="NetconfCallHome">
<status status="NOT RUN" start="2026-04-25T23:14:16.861120" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:14:16.856457" elapsed="0.004738"/>
</branch>
<branch type="ELSE">
<kw name="Get create device request template" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:16.862042" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:16.862268" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<var>${template}</var>
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:16.861827" elapsed="0.000479"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:16.862887" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<arg>${template}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:16.862540" elapsed="0.000391"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:16.861437" elapsed="0.001549"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:16.861237" elapsed="0.001773"/>
</branch>
<status status="PASS" start="2026-04-25T23:14:16.856420" elapsed="0.006614"/>
</if>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:16.863427" level="INFO">${body} = {
    "device": {
        "unique-id": "incorrect_hostname",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}"...</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{device_name}</arg>
<arg>${device_name}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:16.863171" elapsed="0.000283"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:16.863841" level="INFO">${body} = {
    "device": {
        "unique-id": "incorrect_hostname",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "{password}" ]
   ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:16.863612" elapsed="0.000256"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:16.864308" level="INFO">${body} = {
    "device": {
        "unique-id": "incorrect_hostname",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
         ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:16.864077" elapsed="0.000258"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:16.864721" level="INFO">${body} = {
    "device": {
        "unique-id": "incorrect_hostname",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
         ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{hostkey}</arg>
<arg>${hostkey}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:16.864478" elapsed="0.000269"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:16.867720" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:17.069185" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:17.471574" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:17.473837" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:16.864888" elapsed="0.614093">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:17.479502" elapsed="0.000091"/>
</kw>
<arg>incorrect_hostname</arg>
<arg>${INCORRECT_PUB_KEY}</arg>
<arg>root</arg>
<arg>root</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="FAIL" start="2026-04-25T23:14:16.855956" elapsed="0.623874">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<arg>netopeer2</arg>
<arg>${NETOPEER_PUB_KEY}</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="NOT RUN" start="2026-04-25T23:14:17.480570" elapsed="0.000075"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:17.481003" elapsed="0.000051"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>DISCONNECTED</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:17.481434" elapsed="0.000047"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Run Keyword And Expect Error</arg>
<arg>*</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:17.481846" elapsed="0.000045"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:17.484212" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:17.782130" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:17.782515" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:17.782670" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:17.782768" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:17.483546" elapsed="0.299280"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:17.784084" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:17.783295" elapsed="0.000891"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:17.785001" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:18.095340" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:18.095738" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:18.095841" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:18.095935" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:17.784576" elapsed="0.311440"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:18.096956" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:18.152951" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:18.153320" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:18.153420" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:18.153511" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:18.096463" elapsed="0.057139"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:18.154177" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:18.202635" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:18.153952" elapsed="0.048823"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:18.207430" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.409416" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.811721" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.814068" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:18.814191" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:18.203094" elapsed="0.616349">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:18.822962" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:19.024055" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:19.426167" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:19.428487" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:19.428644" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:18.819909" elapsed="0.614319">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:17.482644" elapsed="1.951970">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<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-04-25T23:14:16.460355" elapsed="2.974340">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t6" name="CallHome with Rogue Devices" line="111">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:19.436611" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d926fe4f50&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:19.436098" elapsed="0.000681"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:19.437076" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:19.450247" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:19.436970" elapsed="0.013407"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:19.450949" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:19.887905" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:19.450727" elapsed="0.437391"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:19.888859" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:19.943353" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:19.943640" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCzzElG6xW9eFH1m0of0z9d4GOvwoLkTaXVumGvV7IQ01kR7rWkixsAxjdaVP58CP15uyPmWFpxRyHYTng1Y7ItwQ9NN5Sssh2KN0XhAHkNke37GUfrRrlYRKmSeUVeMBqhTBsnuKsWIbqZ3VGZByrVhYxSX3an+SJMB+nnowlq...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:19.888572" elapsed="0.055133"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:19.952395" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCzzElG6xW9eFH1m0of0z9d4GOvwoLkTaXVumGvV7IQ01kR7rWkixsAxjdaVP58CP15uyPmWFpxRyHYTng1Y7ItwQ9NN5Sssh2KN0XhAHkNke37GUfrRrlYRKmSeUVeMBqhTBsnuKsWIbqZ3VGZByrVhYxSX3an+SJMB+nnowlq...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:19.944132" elapsed="0.008314"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:19.435796" elapsed="0.516739"/>
</kw>
<kw name="Apply SSH-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:19.984744" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:19.953050" elapsed="0.031835"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:19.990894" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/ssh/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:19.985207" elapsed="0.005773"/>
</kw>
<doc>Upload netopeer2 configuration files needed for SSH transport</doc>
<status status="PASS" start="2026-04-25T23:14:19.952747" elapsed="0.038325"/>
</kw>
<kw name="Register SSH call-home device in ODL controller" owner="NetconfCallHome">
<if>
<branch type="IF" condition="'${username}' == '${EMPTY}' or '${password}' == '${EMPTY}'">
<kw name="Get create device request without credentials template" owner="NetconfCallHome">
<status status="NOT RUN" start="2026-04-25T23:14:19.997051" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-04-25T23:14:19.992014" elapsed="0.005116"/>
</branch>
<branch type="ELSE">
<kw name="Get create device request template" owner="NetconfCallHome">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:19.998017" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/create_ssh_device.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:19.998216" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<var>${template}</var>
<arg>${CREATE_SSH_DEVICE_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:19.997793" elapsed="0.000462"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:19.999006" level="INFO">${template} = {
    "device": {
        "unique-id": "{device_name}",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
  ...</msg>
<arg>${template}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:19.998484" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:19.997385" elapsed="0.001764"/>
</kw>
<status status="PASS" start="2026-04-25T23:14:19.997173" elapsed="0.002011"/>
</branch>
<status status="PASS" start="2026-04-25T23:14:19.991977" elapsed="0.007243"/>
</if>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:19.999796" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "{username}",
              "passwords": [ "{password}" ]
      ...</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{device_name}</arg>
<arg>${device_name}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:19.999418" elapsed="0.000417"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:20.000375" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "{password}" ]
          },...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{username}</arg>
<arg>${username}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:20.000043" elapsed="0.000371"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:20.000974" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
          },
     ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{password}</arg>
<arg>${password}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:20.000640" elapsed="0.000373"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:20.001649" level="INFO">${body} = {
    "device": {
        "unique-id": "netopeer2",
        "ssh-client-params": {
          "credentials": {
              "username": "root",
              "passwords": [ "root" ]
          },
     ...</msg>
<var>${body}</var>
<arg>${body}</arg>
<arg>{hostkey}</arg>
<arg>${hostkey}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:20.001282" elapsed="0.000408"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:20.005035" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:20.206415" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:20.608903" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:20.611108" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:20.001891" elapsed="0.614510">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:20.616765" elapsed="0.000039"/>
</kw>
<arg>netopeer2</arg>
<arg>${INCORRECT_PUB_KEY}</arg>
<arg>root</arg>
<arg>root</arg>
<doc>Registration call-home device with SSH transport using latest models</doc>
<status status="FAIL" start="2026-04-25T23:14:19.991450" elapsed="0.625505">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:20.617195" elapsed="0.000030"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>FAILED_NOT_ALLOWED</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:20.617464" elapsed="0.000028"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Run Keyword And Expect Error</arg>
<arg>*</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:20.617717" elapsed="0.000028"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:20.618986" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:20.885082" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:20.885420" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:20.885554" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:20.885655" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:20.618710" elapsed="0.266997"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:20.886808" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:20.886130" elapsed="0.000777"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:20.887785" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:21.182290" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:21.182749" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:21.182853" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:21.182946" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:20.887255" elapsed="0.295743"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:21.183951" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:21.237235" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:21.237493" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:21.237631" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:21.237723" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:21.183459" elapsed="0.054314"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:21.238343" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:21.287239" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:21.238118" elapsed="0.049258"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:21.292253" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.494789" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.897670" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.900007" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:21.900130" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:21.287844" elapsed="0.618072">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:21.909170" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:22.110852" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:22.513178" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:22.515413" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:22.515565" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:21.906279" elapsed="0.614277">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:20.618228" elapsed="1.902718">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<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-04-25T23:14:19.434979" elapsed="3.086127">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</test>
<test id="s1-s1-t7" name="CallHome over TLS with correct certificate and key" line="131">
<kw name="Test Setup" owner="NetconfCallHome" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:22.523122" level="INFO">Creating Session using : alias=session, url=http://10.30.170.71:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x76d924504550&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>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="PASS" start="2026-04-25T23:14:22.522758" elapsed="0.000593"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:22.523726" level="INFO">Executing command 'rm -rf ./configuration-files &amp;&amp; mkdir configuration-files'.</msg>
<msg time="2026-04-25T23:14:22.537062" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files &amp;&amp; mkdir configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:22.523573" elapsed="0.013576"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:22.537657" level="INFO">Executing command 'ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key'.</msg>
<msg time="2026-04-25T23:14:22.949897" level="INFO">Command exited with return code 0.</msg>
<arg>ssh-keygen -q -t rsa -b 2048 -N '' -m pem -f ./configuration-files/ssh_host_rsa_key</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:22.537400" elapsed="0.412722"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:22.951142" level="INFO">Executing command 'cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}''.</msg>
<msg time="2026-04-25T23:14:22.999740" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.000022" level="INFO">${public_key} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCVw9QpKgj/Xz2NeZIJoYyOSmIm3+/7iukeTczYdzBey/SosbxDQrYoJFNe0pFSlcr7BWsT7Jl7w8cYYt5rv+DauKqin0+1oVAUl3JNyYtJbEEoruLvyjFd7L0PlmYCZpQI+mW5Ih7HTuaiBwAsxL6QabH/8Ane2xRsR5ZIuicc...</msg>
<var>${public_key}</var>
<arg>cat configuration-files/ssh_host_rsa_key.pub | awk '{print $2}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:22.950816" elapsed="0.049268"/>
</kw>
<kw name="Set Test Variable" owner="BuiltIn">
<msg time="2026-04-25T23:14:23.009092" level="INFO">${NETOPEER_PUB_KEY} = AAAAB3NzaC1yc2EAAAADAQABAAABAQCVw9QpKgj/Xz2NeZIJoYyOSmIm3+/7iukeTczYdzBey/SosbxDQrYoJFNe0pFSlcr7BWsT7Jl7w8cYYt5rv+DauKqin0+1oVAUl3JNyYtJbEEoruLvyjFd7L0PlmYCZpQI+mW5Ih7HTuaiBwAsxL6QabH/8Ane2xRsR5ZIuicc...</msg>
<arg>${NETOPEER_PUB_KEY}</arg>
<arg>${public_key}</arg>
<doc>Makes a variable available everywhere within the scope of the current test.</doc>
<status status="PASS" start="2026-04-25T23:14:23.000507" elapsed="0.008693"/>
</kw>
<doc>Opens session towards ODL controller, set configuration folder, generates a new host key for the container</doc>
<status status="PASS" start="2026-04-25T23:14:22.522425" elapsed="0.486923"/>
</kw>
<kw name="Apply TLS-based Call-Home configuration" owner="NetconfCallHome">
<kw name="Generate certificates for TLS configuration" owner="NetconfCallHome">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.011317" level="INFO">Executing command 'rm -rf ./certs &amp;&amp; mkdir ./certs'.</msg>
<msg time="2026-04-25T23:14:23.051726" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.051973" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>rm -rf ./certs &amp;&amp; mkdir ./certs</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.011175" elapsed="0.040856"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.098779" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/x509_v3.cfg' -&gt; '/home/jenkins/./x509_v3.cfg'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/x509_v3.cfg</arg>
<arg>./x509_v3.cfg</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:23.052366" elapsed="0.046552"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.099488" level="INFO">Executing command 'openssl genrsa -out ./certs/ca.key 2048'.</msg>
<msg time="2026-04-25T23:14:23.193266" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.193692" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl genrsa -out ./certs/ca.key 2048</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.099255" elapsed="0.094504"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.194604" level="INFO">Executing command 'openssl req -x509 -new -extensions v3_ca -nodes -key ./certs/ca.key -sha256 -days 365 -subj "/C=US/ST=CA/L=Netopeer/O=netopeerCA/CN=netopeerCA" -out ./certs/ca.pem'.</msg>
<msg time="2026-04-25T23:14:23.253452" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.253712" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl req -x509 -new -extensions v3_ca -nodes -key ./certs/ca.key -sha256 -days 365 -subj "/C=US/ST=CA/L=Netopeer/O=netopeerCA/CN=netopeerCA" -out ./certs/ca.pem</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.194231" elapsed="0.059538"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.254388" level="INFO">Executing command 'openssl genrsa -out ./certs/server.key 2048'.</msg>
<msg time="2026-04-25T23:14:23.424688" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.424985" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl genrsa -out ./certs/server.key 2048</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.254093" elapsed="0.170949"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.425760" level="INFO">Executing command 'openssl req -new -sha256 -key ./certs/server.key -subj "/C=US/ST=CA/L=Netopeer/O=Netopeer2/CN=netopeer2-server" -out ./certs/server.csr'.</msg>
<msg time="2026-04-25T23:14:23.489370" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.489638" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl req -new -sha256 -key ./certs/server.key -subj "/C=US/ST=CA/L=Netopeer/O=Netopeer2/CN=netopeer2-server" -out ./certs/server.csr</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.425422" elapsed="0.064275"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.490279" level="INFO">Executing command 'openssl x509 -req -in ./certs/server.csr -CA ./certs/ca.pem -CAkey ./certs/ca.key -CAcreateserial -extfile x509_v3.cfg -out ./certs/server.crt -days 365 -sha256'.</msg>
<msg time="2026-04-25T23:14:23.549831" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.550060" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl x509 -req -in ./certs/server.csr -CA ./certs/ca.pem -CAkey ./certs/ca.key -CAcreateserial -extfile x509_v3.cfg -out ./certs/server.crt -days 365 -sha256</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.490047" elapsed="0.060069"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.550737" level="INFO">Executing command 'openssl rsa -in ./certs/server.key -pubout &gt; ./certs/server.pub'.</msg>
<msg time="2026-04-25T23:14:23.599665" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.600036" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl rsa -in ./certs/server.key -pubout &gt; ./certs/server.pub</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.550442" elapsed="0.049654"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.600909" level="INFO">Executing command 'openssl genrsa -out ./certs/client.key 2048'.</msg>
<msg time="2026-04-25T23:14:23.958946" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:23.959270" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl genrsa -out ./certs/client.key 2048</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.600593" elapsed="0.358736"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:23.960115" level="INFO">Executing command 'openssl req -new -sha256 -key ./certs/client.key -subj "/C=US/ST=CA/L=Netopeer/O=Netopeer2/CN=netopeer2-client" -out ./certs/client.csr'.</msg>
<msg time="2026-04-25T23:14:24.013070" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:24.013330" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl req -new -sha256 -key ./certs/client.key -subj "/C=US/ST=CA/L=Netopeer/O=Netopeer2/CN=netopeer2-client" -out ./certs/client.csr</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:23.959810" elapsed="0.053595"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.014181" level="INFO">Executing command 'openssl x509 -req -in ./certs/client.csr -CA ./certs/ca.pem -CAkey ./certs/ca.key -CAcreateserial -extfile x509_v3.cfg -out ./certs/client.crt -days 1024 -sha256'.</msg>
<msg time="2026-04-25T23:14:24.072980" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:24.073221" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>openssl x509 -req -in ./certs/client.csr -CA ./certs/ca.pem -CAkey ./certs/ca.key -CAcreateserial -extfile x509_v3.cfg -out ./certs/client.crt -days 1024 -sha256</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:24.013924" elapsed="0.059354"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.073907" level="INFO">Executing command 'mv ./certs ./configuration-files/certs'.</msg>
<msg time="2026-04-25T23:14:24.122755" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:24.122970" level="INFO">${stdout} = </msg>
<var>${stdout}</var>
<arg>mv ./certs ./configuration-files/certs</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:24.073663" elapsed="0.049404"/>
</kw>
<doc>Generates certificates for 2-way TLS authentication (ca, server, client)</doc>
<status status="PASS" start="2026-04-25T23:14:23.010760" elapsed="1.112461"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.170688" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-keystore.xml' -&gt; '/home/jenkins/configuration-files/ietf-keystore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-keystore.xml</arg>
<arg>configuration-files/ietf-keystore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:24.123510" elapsed="0.047347"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.178172" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-truststore.xml' -&gt; '/home/jenkins/configuration-files/ietf-truststore.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-truststore.xml</arg>
<arg>configuration-files/ietf-truststore.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:24.171196" elapsed="0.007141"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.186182" level="INFO">'/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-netconf-server.xml' -&gt; '/home/jenkins/configuration-files/ietf-netconf-server.xml'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/libraries/../variables/netconf/callhome/configuration-files/tls/ietf-netconf-server.xml</arg>
<arg>configuration-files/ietf-netconf-server.xml</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-04-25T23:14:24.178752" elapsed="0.007514"/>
</kw>
<doc>Upload netopeer2 configuration files needed for TLS transport</doc>
<status status="PASS" start="2026-04-25T23:14:23.009808" elapsed="1.176547"/>
</kw>
<kw name="Register keys and certificates in ODL controller" owner="NetconfCallHome">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.187471" level="INFO">Executing command 'cat ./configuration-files/certs/client.key'.</msg>
<msg time="2026-04-25T23:14:24.199667" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:24.199822" level="INFO">${pem-client-key} = -----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBH87M74NWqUFW
Ha4F4Ho39vouREbf4glM30a+XX8tNE4oxHRKg1RhQFCCqo04k5Zw8b0oi91uztxb
1arJOqePN9xGu+QfksMJ5bB33EHlixnj5gnGPcbNfi...</msg>
<msg time="2026-04-25T23:14:24.199885" level="INFO">${stderr} = </msg>
<var>${pem-client-key}</var>
<var>${stderr}</var>
<arg>cat ./configuration-files/certs/client.key</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:24.187240" elapsed="0.012676"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-25T23:14:24.200348" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/add_keystore_entry.json"&gt;/w/workspace/netconf-csit-1node-gate-callhome-only-titanium/test/csit/variables/netconf/callhome/json/add_keystore_entry.json&lt;/a&gt;'.</msg>
<msg time="2026-04-25T23:14:24.200573" level="INFO">${template} = {
    "input": {
        "key-credential": [
            {
                "key-id": "tls-device-key",
                "private-key": "{pem-client-key}",
                "passphrase": ""
            }...</msg>
<var>${template}</var>
<arg>${ADD_KEYSTORE_ENTRY_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-25T23:14:24.200122" elapsed="0.000489"/>
</kw>
<kw name="Replace String" owner="String">
<msg time="2026-04-25T23:14:24.201195" level="INFO">${body} = {
    "input": {
        "key-credential": [
            {
                "key-id": "tls-device-key",
                "private-key": "-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwg...</msg>
<var>${body}</var>
<arg>${template}</arg>
<arg>{pem-client-key}</arg>
<arg>${pem-client-key}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-25T23:14:24.200847" elapsed="0.000403"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:24.204862" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:24.406322" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:24.808665" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:24.810828" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/operations/netconf-keystore:add-keystore-entry (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_url}:add-keystore-entry</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:24.201480" elapsed="0.613406">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/operations/netconf-keystore:add-keystore-entry (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.815288" elapsed="0.000041"/>
</kw>
<kw name="Get certificate file content" owner="NetconfCallHome">
<var>${client-key}</var>
<arg>client.key</arg>
<doc>Get certificate or key file content</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.815647" elapsed="0.000058"/>
</kw>
<kw name="Get certificate file content" owner="NetconfCallHome">
<var>${certificate-chain}</var>
<arg>client.crt</arg>
<doc>Get certificate or key file content</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.815956" elapsed="0.000034"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<var>${template}</var>
<arg>${ADD_PRIVATE_KEY_REQ}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.816180" elapsed="0.000029"/>
</kw>
<kw name="Replace String" owner="String">
<var>${body}</var>
<arg>${template}</arg>
<arg>{client-key}</arg>
<arg>${client-key}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.816404" elapsed="0.000030"/>
</kw>
<kw name="Replace String" owner="String">
<var>${body}</var>
<arg>${body}</arg>
<arg>{certificate-chain}</arg>
<arg>${certificate-chain}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.816653" elapsed="0.000031"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_url}:add-private-key</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.816873" elapsed="0.000029"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.817103" elapsed="0.000029"/>
</kw>
<kw name="Get certificate file content" owner="NetconfCallHome">
<var>${ca-certificate}</var>
<arg>ca.pem</arg>
<doc>Get certificate or key file content</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.817363" elapsed="0.000036"/>
</kw>
<kw name="Get certificate file content" owner="NetconfCallHome">
<var>${device-certificate}</var>
<arg>server.crt</arg>
<doc>Get certificate or key file content</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.817640" elapsed="0.000033"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<var>${template}</var>
<arg>${ADD_TRUSTED_CERTIFICATE}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.817849" elapsed="0.000029"/>
</kw>
<kw name="Replace String" owner="String">
<var>${body}</var>
<arg>${template}</arg>
<arg>{ca-certificate}</arg>
<arg>${ca-certificate}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.818072" elapsed="0.000029"/>
</kw>
<kw name="Replace String" owner="String">
<var>${body}</var>
<arg>${body}</arg>
<arg>{device-certificate}</arg>
<arg>${device-certificate}</arg>
<doc>Replaces ``search_for`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.818294" elapsed="0.000029"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_url}:add-trusted-certificate</arg>
<arg>data=${body}</arg>
<arg>headers=${HEADERS}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.818499" elapsed="0.000048"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.818749" elapsed="0.000028"/>
</kw>
<doc>Register pre-configured netopeer2 certificates and key in ODL-netconf keystore</doc>
<status status="FAIL" start="2026-04-25T23:14:24.186786" elapsed="0.632133">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/operations/netconf-keystore:add-keystore-entry (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="Register TLS call-home device in ODL controller" owner="NetconfCallHome">
<arg>netopeer2</arg>
<arg>tls-device-key</arg>
<arg>tls-device-certificate</arg>
<doc>Registration call-home device with TLS transport</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.819187" elapsed="0.000036"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose up -d</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-04-25T23:14:24.819415" elapsed="0.000029"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>90s</arg>
<arg>2s</arg>
<arg>NetconfCallHome.Check Device Status</arg>
<arg>CONNECTED</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.819753" elapsed="0.000040"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30s</arg>
<arg>2s</arg>
<arg>Utils.Check For Elements At URI</arg>
<arg>${mount_point_url}</arg>
<arg>${netconf_mount_expected_values}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-25T23:14:24.820005" elapsed="0.000029"/>
</kw>
<kw name="Test Teardown" owner="NetconfCallHome" type="TEARDOWN">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:24.821292" level="INFO">Executing command 'docker-compose logs'.</msg>
<msg time="2026-04-25T23:14:25.097967" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:25.098356" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:25.098457" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:25.098586" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose logs</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="PASS" start="2026-04-25T23:14:24.821086" elapsed="0.277556"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-25T23:14:25.099842" level="INFO"/>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-25T23:14:25.099116" elapsed="0.000868"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:25.100744" level="INFO">Executing command 'docker-compose down'.</msg>
<msg time="2026-04-25T23:14:25.400186" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-04-25T23:14:25.400638" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:25.400746" level="INFO">${stderr} = client version 1.21 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version</msg>
<msg time="2026-04-25T23:14:25.400975" level="INFO">${rc} = 1</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker-compose down</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="PASS" start="2026-04-25T23:14:25.100329" elapsed="0.300703"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:25.401968" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-04-25T23:14:25.471330" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:25.471775" level="INFO">${stdout} = CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES</msg>
<msg time="2026-04-25T23:14:25.471882" level="INFO">${stderr} = </msg>
<msg time="2026-04-25T23:14:25.471975" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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="PASS" start="2026-04-25T23:14:25.401483" elapsed="0.070545"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-04-25T23:14:25.472875" level="INFO">Executing command 'rm -rf ./configuration-files'.</msg>
<msg time="2026-04-25T23:14:25.518978" level="INFO">Command exited with return code 0.</msg>
<arg>rm -rf ./configuration-files</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-04-25T23:14:25.472578" elapsed="0.046582"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:25.523383" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:25.724938" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:26.127036" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:26.129317" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:26.129421" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${whitelist}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:25.519573" elapsed="0.614897">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:26.138737" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:26.339824" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:26.741821" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:26.744729" level="INFO">${resp} = None</msg>
<msg time="2026-04-25T23:14:26.744836" level="FAIL">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</msg>
<var>${resp}</var>
<arg>session</arg>
<arg>url=${netconf_keystore_data_url}</arg>
<arg>expected_status=anything</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-25T23:14:26.134932" elapsed="0.615012">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Tears down the docker running netopeer and deletes entry from the whitelist.</doc>
<status status="FAIL" start="2026-04-25T23:14:24.820716" elapsed="1.929410">Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</status>
</kw>
<doc>Using correct certificate and key pair should result to successful mount. CONNECTED should be the device status.</doc>
<status status="FAIL" start="2026-04-25T23:14:22.521735" elapsed="4.228472">ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/operations/netconf-keystore:add-keystore-entry (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

Also teardown failed:
Several failures occurred:

1) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))

2) ConnectionError: HTTPConnectionPool(host='10.30.170.71', port=8181): Max retries exceeded with url: /rests/data/netconf-keystore:keystore (Caused by NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused"))</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-04-25T23:14:26.751855" level="INFO">Executing command 'pip uninstall docker-compose'.</msg>
<msg time="2026-04-25T23:14:27.493734" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-04-25T23:14:27.494165" level="INFO">${stdout} = </msg>
<msg time="2026-04-25T23:14:27.494267" level="INFO">${stderr} = WARNING: Skipping docker-compose as it is not installed.</msg>
<msg time="2026-04-25T23:14:27.494356" level="INFO">${rc} = 0</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="PASS" start="2026-04-25T23:14:26.751643" elapsed="0.742765"/>
</kw>
<doc>Uninstall docker-compose on tools system</doc>
<status status="PASS" start="2026-04-25T23:14:26.751319" elapsed="0.743341"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-04-25T23:14:27.495226" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-25T23:14:27.495015" elapsed="0.001398"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-25T23:14:27.496739" elapsed="0.000705"/>
</kw>
<doc>Tearing down the setup.</doc>
<status status="PASS" start="2026-04-25T23:14:26.751014" elapsed="0.746598"/>
</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-04-25T23:13:52.166111" elapsed="35.331581"/>
</suite>
<status status="FAIL" start="2026-04-25T23:13:52.127048" elapsed="35.373583"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="7" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="netconf-gate-callhome.txt" id="s1" pass="0" fail="7" skip="0">netconf-gate-callhome.txt</stat>
<stat name="Callhome" id="s1-s1" pass="0" fail="7" skip="0">netconf-gate-callhome.txt.Callhome</stat>
</suite>
</statistics>
<errors>
<msg time="2026-04-25T23:14:05.027613" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:05.229786" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:05.632809" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.334313" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.535897" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.937929" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:06.948692" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:07.150432" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:07.552613" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:08.098560" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:08.299920" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:08.702151" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:09.404060" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:09.606059" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:10.008260" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:10.021029" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:10.222336" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:10.624543" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:11.134207" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:11.335838" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:11.738433" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:12.432442" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:12.634279" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:13.036405" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:13.048385" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.249905" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.652105" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:13.932150" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:14.133630" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:14.535686" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/global/credentials</msg>
<msg time="2026-04-25T23:14:15.231614" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.433176" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.835408" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:15.846745" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.048022" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.450495" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:16.867720" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:17.069185" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:17.471574" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.207430" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.409416" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.811721" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:18.822962" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:19.024055" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:19.426167" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:20.005035" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:20.206415" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:20.608903" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.292253" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.494789" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.897670" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:21.909170" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:22.110852" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:22.513178" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:24.204862" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:24.406322" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:24.808665" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/operations/netconf-keystore:add-keystore-entry</msg>
<msg time="2026-04-25T23:14:25.523383" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:25.724938" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:26.127036" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/odl-netconf-callhome-server:netconf-callhome-server/allowed-devices</msg>
<msg time="2026-04-25T23:14:26.138737" level="WARN">Retrying (RetryAdapter(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:26.339824" level="WARN">Retrying (RetryAdapter(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
<msg time="2026-04-25T23:14:26.741821" level="WARN">Retrying (RetryAdapter(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError("HTTPConnection(host='10.30.170.71', port=8181): Failed to establish a new connection: [Errno 111] Connection refused")': /rests/data/netconf-keystore:keystore</msg>
</errors>
</robot>
