<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-21T00:47:41.217225" rpa="false" schemaversion="5">
<suite id="s1" name="daexim-basic.txt">
<suite id="s1-s1" name="010-Special-Export" source="/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/suites/daexim/010-special-export.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.824763" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:41.821070" elapsed="0.003733"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:41.825039" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:41.824917" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:41.824889" elapsed="0.000229"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.825652" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:41.825271" elapsed="0.000432"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.826225" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:41.825871" elapsed="0.000384"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.826845" elapsed="0.000303"/>
</kw>
<msg time="2026-04-21T00:47:41.827260" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:41.827328" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.826444" elapsed="0.000913"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.827923" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:41.827530" elapsed="0.000420"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.828960" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:41.828684" elapsed="0.000303"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.829415" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:41.829129" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.829961" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-21T00:47:41.829613" elapsed="0.000376"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.832489" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:41.832291" elapsed="0.000274"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.830053" elapsed="0.002543"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.833110" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:41.832745" elapsed="0.000410"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.833694" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:41.833321" elapsed="0.000416"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.834226" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:41.833885" elapsed="0.000383"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:41.828199" elapsed="0.006151"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-21T00:47:41.820474" elapsed="0.013936"/>
</kw>
<test id="s1-s1-t1" name="Create and Cancel Export" line="13">
<kw name="Verify Export Status" owner="DaeximKeywords">
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.842269" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:41.841966" elapsed="0.000344"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:41.842360" elapsed="0.000042"/>
</return>
<msg time="2026-04-21T00:47:41.842530" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:41.841623" elapsed="0.000932"/>
</kw>
<kw name="Post_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.855247" level="INFO">/rests/operations/data-export-import:status-export</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.854988" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.855698" level="INFO"/>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.855449" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.856180" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.855930" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.856620" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.856377" elapsed="0.000286"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.857598" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-21T00:47:41.857383" elapsed="0.000242"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-21T00:47:41.857941" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-21T00:47:41.857766" elapsed="0.000201"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-21T00:47:41.858103" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.858803" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.858554" elapsed="0.000294"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-21T00:47:41.858892" elapsed="0.000033"/>
</return>
<msg time="2026-04-21T00:47:41.859056" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-21T00:47:41.856851" elapsed="0.002230"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:41.861713" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.861396" elapsed="0.001007">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:41.859157" elapsed="0.003340">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.862671" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.862532" elapsed="0.000204"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:41.859138" elapsed="0.003623">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.863119" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.863258" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:41.863219" elapsed="0.000097"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:41.863200" elapsed="0.000140"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.863485" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.863552" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.852382" elapsed="0.011285">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.863743" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Post_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.849890" elapsed="0.013954">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.863906" elapsed="0.000015"/>
</return>
<var>${response_json}</var>
<arg>${STATUS_EXPORT_URL}</arg>
<arg>${EMPTY}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.839485" elapsed="0.024513">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.864148" elapsed="0.000020"/>
</kw>
<kw name="Convert To String" owner="BuiltIn">
<var>${response_json}</var>
<arg>${response_json}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.864311" elapsed="0.000021"/>
</kw>
<kw name="Verify Export Status Message" owner="DaeximKeywords">
<arg>${status}</arg>
<arg>${response_json}</arg>
<doc>Verify export restconf response message is as expected</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.864543" elapsed="0.000024"/>
</kw>
<arg>${EXPORT_INITIAL_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="FAIL" start="2026-04-21T00:47:41.835074" elapsed="0.029583">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule Export job</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.864922" elapsed="0.000058"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<arg>${EXPORT_SCHEDULED_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.865196" elapsed="0.000025"/>
</kw>
<kw name="Cancel Export" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Cancel the export job</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.865427" elapsed="0.000024"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<arg>${EXPORT_INITIAL_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.865634" elapsed="0.000023"/>
</kw>
<doc>schedule and cancel export of a cluster</doc>
<tag>cancel export</tag>
<status status="FAIL" start="2026-04-21T00:47:41.834474" elapsed="0.031326">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</test>
<test id="s1-s1-t2" name="Schedule Absolute Time Export With UTC" line="22">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-21T00:47:41.867029" level="INFO">${time} = 2026-04-21T00:47:51Z</msg>
<var>${time}</var>
<arg>UTC</arg>
<arg>00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%SZ</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-21T00:47:41.866669" elapsed="0.000387"/>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.871763" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.871588" elapsed="0.000233"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.872341" level="INFO">${file} = /w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:41.871984" elapsed="0.000385"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:41.871846" elapsed="0.000563"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:41.871567" elapsed="0.000864"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-21T00:47:41.872815" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-21T00:47:41.872965" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-21T00:47:41.872671" elapsed="0.000320"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.873510" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-21T00:47:51Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-21T00:47:41.873141" elapsed="0.000395"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.874362" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.874039" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.885961" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:41.885665" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:41.886036" elapsed="0.000032"/>
</return>
<msg time="2026-04-21T00:47:41.886189" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:41.885327" elapsed="0.000886"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.888943" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.888669" elapsed="0.000318"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:41.891180" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.890983" elapsed="0.000564">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:41.889057" elapsed="0.002565">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.891795" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.891656" elapsed="0.000199"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:41.889037" elapsed="0.002842">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.892222" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.892292" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-21T00:47:41.886479" elapsed="0.005939">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.892475" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.884936" elapsed="0.007633">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.892779" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.892852" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.882765" elapsed="0.010184">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.874527" elapsed="0.018488"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.894239" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.893970" elapsed="0.000381">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.894563" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.895000" elapsed="0.000022"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.895064" elapsed="0.000016"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.893591" elapsed="0.001575">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.895260" level="INFO">${output1} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.893159" elapsed="0.002126"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.896713" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.896218" elapsed="0.000594">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.897024" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.897200" elapsed="0.000025"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.897274" elapsed="0.000038"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.895844" elapsed="0.001557">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.897495" level="INFO">${output2} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.895448" elapsed="0.002072"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.898400" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.898099" elapsed="0.000393">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.898702" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.898877" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.898937" elapsed="0.000015"/>
</return>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.897727" elapsed="0.001307">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.899179" elapsed="0.000020"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.899336" elapsed="0.000021"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="FAIL" start="2026-04-21T00:47:41.873727" elapsed="0.025715">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.903577" elapsed="0.000026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.903791" elapsed="0.000021"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="FAIL" start="2026-04-21T00:47:41.867533" elapsed="0.036365">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>20 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Scheduled Export Timestamp</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.904050" elapsed="0.000029"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>20 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Export Status</arg>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.904224" elapsed="0.000020"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.904504" elapsed="0.000024"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="FAIL" start="2026-04-21T00:47:41.866188" elapsed="0.038466">Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-t3" name="Schedule Absolute Time Export With Localtime" line="41">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-21T00:47:41.906142" level="INFO">${time} = 2026-04-21T00:47:51+000</msg>
<var>${time}</var>
<arg>local</arg>
<arg>00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%S+000</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-21T00:47:41.905673" elapsed="0.000496"/>
</kw>
<kw name="Run Keyword And Expect Error" owner="BuiltIn">
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.911136" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.910968" elapsed="0.000226"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.911698" level="INFO">${file} = /w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:41.911367" elapsed="0.000357"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:41.911218" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:41.910948" elapsed="0.000837"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-21T00:47:41.912045" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-21T00:47:41.912168" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-21T00:47:41.911912" elapsed="0.000281"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.912760" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-21T00:47:51+000",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-21T00:47:41.912366" elapsed="0.000422"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.913604" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.913281" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.925158" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:41.924863" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:41.925229" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:41.925395" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:41.924536" elapsed="0.000883"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.928167" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.927894" elapsed="0.000319"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:41.930414" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.930207" elapsed="0.000506">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:41.928281" elapsed="0.002505">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.930950" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.930817" elapsed="0.000193"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:41.928262" elapsed="0.002771">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.931397" elapsed="0.000026"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.931506" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-21T00:47:41.925672" elapsed="0.005942">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.931672" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.924112" elapsed="0.007654">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.931930" elapsed="0.000022"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.932001" elapsed="0.000016"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.921953" elapsed="0.010157">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.913769" elapsed="0.018402"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.933412" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.933131" elapsed="0.000370">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.933711" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.933892" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.933952" elapsed="0.000015"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.932738" elapsed="0.001311">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.934140" level="INFO">${output1} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.932339" elapsed="0.001832"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.935376" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.935099" elapsed="0.000368">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.935676" elapsed="0.000207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.936070" elapsed="0.000022"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.936134" elapsed="0.000016"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.934727" elapsed="0.001508">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.936355" level="INFO">${output2} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.934333" elapsed="0.002048"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.937226" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.936965" elapsed="0.000374">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.937550" elapsed="0.000030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.937732" elapsed="0.000021"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.937792" elapsed="0.000016"/>
</return>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.936586" elapsed="0.001304">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.938037" elapsed="0.000021"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.938218" elapsed="0.000021"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="FAIL" start="2026-04-21T00:47:41.912980" elapsed="0.025364">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.942460" elapsed="0.000026"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.942629" elapsed="0.000020"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="FAIL" start="2026-04-21T00:47:41.906985" elapsed="0.035748">Dictionary does not contain key '1'.</status>
</kw>
<arg>*</arg>
<arg>Schedule Export</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the keyword and checks that the expected error occurred.</doc>
<status status="PASS" start="2026-04-21T00:47:41.906508" elapsed="0.036383"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="PASS" start="2026-04-21T00:47:41.905081" elapsed="0.037920"/>
</test>
<test id="s1-s1-t4" name="Schedule Absolute Time Export In Past" line="47">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-21T00:47:41.944056" level="INFO">${time} = 2026-04-21T00:47:31Z</msg>
<var>${time}</var>
<arg>UTC</arg>
<arg>-00:00:10</arg>
<arg>%Y-%m-%dT%H:%M:%SZ</arg>
<arg>${FALSE}</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-21T00:47:41.943754" elapsed="0.000329"/>
</kw>
<kw name="Run Keyword And Expect Error" owner="BuiltIn">
<kw name="Schedule Export" owner="DaeximKeywords">
<if>
<branch type="IF" condition="${include}">
<kw name="Set Variable" owner="BuiltIn">
<var>${file}</var>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.948962" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.948792" elapsed="0.000235"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.949536" level="INFO">${file} = /w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json</msg>
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_EXCLUDE_FILE}</arg>
<arg>${EXPORT_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:41.949183" elapsed="0.000380"/>
</kw>
<status status="PASS" start="2026-04-21T00:47:41.949051" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:41.948772" elapsed="0.000852"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-21T00:47:41.949887" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json"&gt;/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/schedule_export.json&lt;/a&gt;'.</msg>
<msg time="2026-04-21T00:47:41.950011" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "${time}",
    "data-export-import:local-node-only": "${flag}"
   }
 }
</msg>
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-21T00:47:41.949752" elapsed="0.000285"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.950529" level="INFO">${json} =  {
   "input": {
    "data-export-import:run-at": "2026-04-21T00:47:31Z",
    "data-export-import:local-node-only": "false"
   }
 }
</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-21T00:47:41.950173" elapsed="0.000382"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.951369" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.951045" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.962972" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:41.962677" elapsed="0.000322"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:41.963044" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:41.963191" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:41.962356" elapsed="0.000860"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.966020" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:41.965771" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:41.968261" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.968071" elapsed="0.000512">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:41.966131" elapsed="0.002525">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.968818" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:41.968687" elapsed="0.000190"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:41.966113" elapsed="0.002787">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.969245" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.969332" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-21T00:47:41.963479" elapsed="0.005998">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.969536" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.961964" elapsed="0.007667">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.969786" elapsed="0.000021"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.969857" elapsed="0.000015"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.959808" elapsed="0.010143">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.951532" elapsed="0.018478"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.971229" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.970967" elapsed="0.000367">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.971614" elapsed="0.000030"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.971802" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.971861" elapsed="0.000016"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.970559" elapsed="0.001408">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.972060" level="INFO">${output1} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.970149" elapsed="0.001937"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.973277" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.973017" elapsed="0.000362">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.973590" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.973959" elapsed="0.000021"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.974020" elapsed="0.000015"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.972645" elapsed="0.001472">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:41.974209" level="INFO">${output2} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:41.972230" elapsed="0.002004"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.975086" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.974828" elapsed="0.000342">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.975394" elapsed="0.000024"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.975602" elapsed="0.000021"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.975663" elapsed="0.000015"/>
</return>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.974453" elapsed="0.001307">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.975912" elapsed="0.000021"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.976055" elapsed="0.000019"/>
</kw>
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="FAIL" start="2026-04-21T00:47:41.950746" elapsed="0.025450">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.980329" elapsed="0.000027"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.980502" elapsed="0.000021"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Schedule Export job</doc>
<status status="FAIL" start="2026-04-21T00:47:41.944698" elapsed="0.035912">Dictionary does not contain key '1'.</status>
</kw>
<arg>*</arg>
<arg>Schedule Export</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>${time}</arg>
<doc>Runs the keyword and checks that the expected error occurred.</doc>
<status status="PASS" start="2026-04-21T00:47:41.944234" elapsed="0.036454"/>
</kw>
<doc>Schedule export at a particular time</doc>
<tag>absolute time export</tag>
<status status="PASS" start="2026-04-21T00:47:41.943334" elapsed="0.037465"/>
</test>
<test id="s1-s1-t5" name="Create Module Exclude Export" line="53">
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.982469" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.981979" elapsed="0.000520"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.983254" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.982992" elapsed="0.000386">Dictionary does not contain key '1'.</status>
</kw>
<return>
<value>${ip_address}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.983437" elapsed="0.000018"/>
</return>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.982695" elapsed="0.000840">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.983776" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.983948" elapsed="0.000020"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.984165" elapsed="0.000023"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.984444" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.984617" elapsed="0.000021"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.984775" elapsed="0.000019"/>
</kw>
<return>
<value>${file_path}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.984843" elapsed="0.000016"/>
</return>
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>network-topology</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.981636" elapsed="0.003303">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<var>${lines1}</var>
<arg>${file1}</arg>
<arg>network-topology:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.985089" elapsed="0.000020"/>
</kw>
<kw name="Should Be Empty" owner="BuiltIn">
<arg>${lines1}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.985240" elapsed="0.000019"/>
</kw>
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<var>${file2}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>operational</arg>
<arg>opendaylight-inventory</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.985492" elapsed="0.000028"/>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<var>${lines2}</var>
<arg>${file2}</arg>
<arg>opendaylight-inventory:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.985659" elapsed="0.000020"/>
</kw>
<kw name="Should Be Empty" owner="BuiltIn">
<arg>${lines2}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.985807" elapsed="0.000019"/>
</kw>
<doc>schedule export with exclude option on a cluster</doc>
<tag>exclude export</tag>
<status status="FAIL" start="2026-04-21T00:47:41.981062" elapsed="0.004886">Dictionary does not contain key '1'.</status>
</test>
<test id="s1-s1-t6" name="Create Wildcard Exclude Export" line="66">
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:41.987713" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:41.987259" elapsed="0.000481"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:41.988704" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.988439" elapsed="0.000358">Dictionary does not contain key '1'.</status>
</kw>
<return>
<value>${ip_address}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.988857" elapsed="0.000017"/>
</return>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.987933" elapsed="0.001021">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<arg>500</arg>
<arg>${TRUE}</arg>
<arg>${module}</arg>
<arg>${store}</arg>
<doc>Schedule Export job</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.989190" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.989419" elapsed="0.000022"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.989641" elapsed="0.000023"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.989891" elapsed="0.000023"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.990052" elapsed="0.000020"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.990205" elapsed="0.000019"/>
</kw>
<return>
<value>${file_path}</value>
<status status="NOT RUN" start="2026-04-21T00:47:41.990268" elapsed="0.000015"/>
</return>
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>*</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="FAIL" start="2026-04-21T00:47:41.986802" elapsed="0.003578">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Get File" owner="OperatingSystem">
<var>${lines1}</var>
<arg>${file1}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.990534" elapsed="0.000020"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${lines1}</arg>
<arg>{}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.990684" elapsed="0.000019"/>
</kw>
<kw name="Schedule Exclude Export" owner="DaeximKeywords">
<var>${file2}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>operational</arg>
<arg>*</arg>
<doc>Schedules a export with exclude option. Returns the file that has the excluded export.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.990900" elapsed="0.000022"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<var>${lines2}</var>
<arg>${file2}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.991063" elapsed="0.000020"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${lines2}</arg>
<arg>{}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:41.991210" elapsed="0.000020"/>
</kw>
<doc>schedule export with wildstar exclude option</doc>
<tag>wildcard exclude export</tag>
<status status="FAIL" start="2026-04-21T00:47:41.986232" elapsed="0.005155">Dictionary does not contain key '1'.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-21T00:47:41.992075" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:41.991996" elapsed="0.000128"/>
</kw>
<doc>Test suite for verifying basic variations of export API including checking statuses</doc>
<status status="FAIL" start="2026-04-21T00:47:41.257524" elapsed="0.734632"/>
</suite>
<suite id="s1-s2" name="020-Import-Basic" source="/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/suites/daexim/020-import-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.066473" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.062724" elapsed="0.003779"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.066694" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.066585" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.066565" elapsed="0.000191"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.067213" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.066900" elapsed="0.000355"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.067731" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.067419" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:42.068216" elapsed="0.000292"/>
</kw>
<msg time="2026-04-21T00:47:42.068609" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.068655" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.067903" elapsed="0.000774"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.069200" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:42.068833" elapsed="0.000392"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.070156" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.069897" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.070619" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.070360" elapsed="0.000285"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.071075" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.070785" elapsed="0.000316"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.073472" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.073286" elapsed="0.000303"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.071160" elapsed="0.002460"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.074118" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.073770" elapsed="0.000391"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.074690" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.074342" elapsed="0.000391"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.075215" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.074878" elapsed="0.000379"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.069470" elapsed="0.005864"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-21T00:47:42.062412" elapsed="0.012979"/>
</kw>
<test id="s1-s2-t1" name="Create Basic Import" line="11">
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.076923" level="INFO">${host_index} = 1</msg>
<var>${host_index}</var>
<arg>${host_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:42.076613" elapsed="0.000336"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Delete_And_Check_Member_List_Or_All" owner="ClusterManagement">
<kw name="Delete_From_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.088397" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.088082" elapsed="0.000342"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:42.088479" elapsed="0.000035"/>
</return>
<msg time="2026-04-21T00:47:42.088633" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:42.087761" elapsed="0.000896"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.092807" level="INFO">network-topology:network-topology/topology</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.092556" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.095104" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.094905" elapsed="0.000542">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:42.092927" elapsed="0.002604">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.095696" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.095562" elapsed="0.000194"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:42.092908" elapsed="0.002871">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.096126" elapsed="0.000024"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.096196" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-04-21T00:47:42.088913" elapsed="0.007401">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.096372" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>${uri}</arg>
<arg>${member_index}</arg>
<doc>Send a DELETE with the supplied uri to member 1.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.087394" elapsed="0.009071">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5s</arg>
<arg>1s</arg>
<arg>Check_No_Content_Member_List_Or_All</arg>
<arg>uri=${uri}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.096621" elapsed="0.000021"/>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.096692" elapsed="0.000016"/>
</return>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Send a DELETE with the supplied uri to the member ${member_index}.
Then check the data is removed from all members in ${member_index_list}.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.085197" elapsed="0.011589">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<arg>ClusterManagement.Delete And Check Member List Or All</arg>
<arg>${TOPOLOGY_URL}</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.077091" elapsed="0.019753"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:42.098061" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.097786" elapsed="0.000361">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.098423" elapsed="0.000025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.098603" elapsed="0.000021"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.098663" elapsed="0.000016"/>
</return>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.097409" elapsed="0.001352">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:42.098859" level="INFO">${output1} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output1}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.096984" elapsed="0.001899"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:42.100074" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.099816" elapsed="0.000343">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.100383" elapsed="0.000025"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.100560" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.100620" elapsed="0.000015"/>
</return>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.099436" elapsed="0.001280">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-04-21T00:47:42.100807" level="INFO">${output2} = ('FAIL', "Dictionary does not contain key '1'.")</msg>
<var>${output2}</var>
<arg>ClusterManagement.Run Bash Command On Member</arg>
<arg>rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear</arg>
<arg>${host_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.099029" elapsed="0.001803"/>
</kw>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:42.101676" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${member_ip}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.101420" elapsed="0.000340">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<var>${output}</var>
<arg>Utils.Run_Command_On_Controller</arg>
<arg>${member_ip}</arg>
<arg>${command}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.101978" elapsed="0.000023"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.102151" elapsed="0.000020"/>
</kw>
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.102210" elapsed="0.000016"/>
</return>
<var>${output}</var>
<arg>ls -lart ${WORKSPACE}/${BUNDLEFOLDER}</arg>
<arg>${host_index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.101035" elapsed="0.001293">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.102483" elapsed="0.000021"/>
</kw>
<kw name="Should Not Match Regexp" owner="BuiltIn">
<arg>${output}</arg>
<arg>daexim</arg>
<doc>Fails if ``string`` matches ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.102630" elapsed="0.000019"/>
</kw>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="FAIL" start="2026-04-21T00:47:42.076286" elapsed="0.026445">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Stop_Members_From_List_Or_All" owner="ClusterManagement">
<doc>If the list is empty, stops all ODL instances. Otherwise stop members based on ${stop_index_list}
If ${confirm} is True, verify stopped instances are not there anymore.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member_index_list}</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.103047" elapsed="0.000024"/>
</kw>
<kw name="Start_Members_From_List_Or_All" owner="ClusterManagement">
<doc>If the list is empty, start all cluster members. Otherwise, start members based on present indices.
If ${wait_for_sync}, wait for cluster sync on listed members.
Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
Garbage collection is unconditionally logged to files. TODO: Make that reasonable conditional?</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.107317" elapsed="0.000028"/>
</kw>
<kw name="Copy Config Data To Controller" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>This keyword copies the daexim folder under variables folder to the Controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.107562" elapsed="0.000034"/>
</kw>
<kw name="Schedule Import" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule an Import API</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.107850" elapsed="0.000026"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>5 sec</arg>
<arg>Wait for completion of import processing</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.108005" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>30 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Netconf Mount</arg>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.108163" elapsed="0.000020"/>
</kw>
<doc>schedule a basic import/restore with data containg controller mounting itself as a NETCONF
device. The configuration is documented in
https://docs.opendaylight.org/projects/netconf/en/latest/user-guide.html#spawning-new-netconf-connectors</doc>
<tag>create restore</tag>
<status status="FAIL" start="2026-04-21T00:47:42.075448" elapsed="0.032927">Dictionary does not contain key '1'.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-21T00:47:42.108960" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.108880" elapsed="0.000129"/>
</kw>
<doc>Test suite for verifying basic import</doc>
<status status="FAIL" start="2026-04-21T00:47:41.992944" elapsed="0.116096"/>
</suite>
<suite id="s1-s3" name="030-Export-Basic" source="/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/suites/daexim/030-export-basic.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.183118" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.179418" elapsed="0.003730"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.183348" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.183229" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.183208" elapsed="0.000205"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.183859" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.183552" elapsed="0.000349"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.184370" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.184048" elapsed="0.000348"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:42.184913" elapsed="0.000293"/>
</kw>
<msg time="2026-04-21T00:47:42.185333" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.185382" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.184546" elapsed="0.000859"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.185928" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:42.185557" elapsed="0.000398"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.186884" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.186623" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.187342" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.187043" elapsed="0.000327"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.187803" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.187514" elapsed="0.000316"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.190335" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.190146" elapsed="0.000265"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.187887" elapsed="0.002556"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.190945" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.190595" elapsed="0.000395"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.191515" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.191150" elapsed="0.000409"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.192036" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.191704" elapsed="0.000374"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.186178" elapsed="0.005958"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-21T00:47:42.179103" elapsed="0.013090"/>
</kw>
<test id="s1-s3-t1" name="Create Basic Export" line="11">
<kw name="Mount Netconf Endpoint" owner="DaeximKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.193882" level="INFO">${ENDPOINT} = CONTROLLER1</msg>
<var>${ENDPOINT}</var>
<arg>${endpoint}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.193596" elapsed="0.000312"/>
</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-21T00:47:42.211195" elapsed="0.000491"/>
</kw>
<msg time="2026-04-21T00:47:42.211742" 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-21T00:47:42.210851" elapsed="0.000946"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return ../variables/daexim/scandium/netconf_mount.json if vanadium is at least ${lower_bound},
return ../variables/daexim/calcium/netconf_mount.json otherwise.</doc>
<status status="PASS" start="2026-04-21T00:47:42.210481" elapsed="0.001392"/>
</kw>
<msg time="2026-04-21T00:47:42.211917" 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-21T00:47:42.202248" elapsed="0.009713"/>
</kw>
<msg time="2026-04-21T00:47:42.212062" level="INFO">${dictionary} = ../variables/daexim/scandium/netconf_mount.json</msg>
<var>${dictionary}</var>
<arg>${NETCONF_PAYLOAD_JSON_SCANDIUM}</arg>
<arg>${NETCONF_PAYLOAD_JSON_CALCIUM}</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-04-21T00:47:42.201883" elapsed="0.010203"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-04-21T00:47:42.212418" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json"&gt;/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/variables/daexim/scandium/netconf_mount.json&lt;/a&gt;'.</msg>
<msg time="2026-04-21T00:47:42.212576" level="INFO">${json} = {
  "node": {
    "node-id": "${ENDPOINT}",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/libraries/${dictionary}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-21T00:47:42.212228" elapsed="0.000374"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.213062" level="INFO">${json} = {
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-passw...</msg>
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="PASS" start="2026-04-21T00:47:42.212741" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.213484" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.213228" elapsed="0.000302"/>
</kw>
<kw name="Put_As_Json_To_Member" owner="ClusterManagement">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.218913" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>ClusterManagement__session_${member_index}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.218618" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-04-21T00:47:42.218986" elapsed="0.000031"/>
</return>
<msg time="2026-04-21T00:47:42.219138" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${member_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-04-21T00:47:42.218277" elapsed="0.000885"/>
</kw>
<kw name="Put_As_Json_To_Uri" owner="TemplatedRequests">
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.224465" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=CONTROLLER1</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.224167" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.224881" level="INFO">{
  "node": {
    "node-id": "CONTROLLER1",
    "netconf-node": {
        "host": "127.0.0.1",
        "port": "1830",
        "tcp-only": "false",
        "keepalive-delay": "0",
        "login-password-unencrypted": {
            "username": "admin",
            "password": "admin"
        }
    }
  }
}
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.224647" elapsed="0.000279"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.225313" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.225060" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.225729" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.225494" elapsed="0.000278"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:42.226551" level="INFO">${accumulator} = {'Content-Type': 'application/json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-04-21T00:47:42.226352" elapsed="0.000225"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-04-21T00:47:42.226887" level="INFO">${items_to_add} = []</msg>
<var>${items_to_add}</var>
<arg>${second}</arg>
<doc>Returns items of the given ``dictionary`` as a list.</doc>
<status status="PASS" start="2026-04-21T00:47:42.226712" elapsed="0.000200"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${accumulator}</arg>
<arg>@{items_to_add}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.227045" elapsed="0.000211"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.227656" level="INFO">{'Content-Type': 'application/json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-21T00:47:42.227412" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-04-21T00:47:42.227740" elapsed="0.000030"/>
</return>
<msg time="2026-04-21T00:47:42.227894" level="INFO">${headers} = {'Content-Type': 'application/json'}</msg>
<var>${headers}</var>
<arg>first=${content_type}</arg>
<arg>second=${accept}</arg>
<doc>Take two dicts, join them, return result. Second argument values take precedence.</doc>
<status status="PASS" start="2026-04-21T00:47:42.225954" elapsed="0.001964"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-04-21T00:47:42.230339" level="FAIL">Non-existing index or alias 'ClusterManagement__session_1'.</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.230034" elapsed="0.000627">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<status status="FAIL" start="2026-04-21T00:47:42.227989" elapsed="0.002753">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.230906" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-21T00:47:42.230773" elapsed="0.000199"/>
</branch>
<status status="FAIL" start="2026-04-21T00:47:42.227971" elapsed="0.003023">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.231359" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.231486" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.231450" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-04-21T00:47:42.231433" elapsed="0.000114"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.231673" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.231738" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>PUT data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.221759" elapsed="0.010082">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.231909" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Put_To_Uri normalized response text.
Yang json content type is used as a workaround to RequestsLibrary json conversion eagerness.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.219381" elapsed="0.012621">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.232059" elapsed="0.000014"/>
</return>
<var>${resp}</var>
<arg>${NETCONF_NODE_URL}=${endpoint}</arg>
<arg>${json}</arg>
<arg>${host_index}</arg>
<doc>Send a PUT with the supplied uri and data to member ${member_index}.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.217770" elapsed="0.014390">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${resp}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.232338" elapsed="0.000022"/>
</kw>
<arg>${NETCONF_EP_NAME}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Mount a netconf endpoint</doc>
<status status="FAIL" start="2026-04-21T00:47:42.193208" elapsed="0.039232">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</kw>
<kw name="Schedule Export" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Schedule Export job</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.232707" elapsed="0.000025"/>
</kw>
<kw name="Verify Export Status" owner="DaeximKeywords">
<arg>${EXPORT_SCHEDULED_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify export status is as expected</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.232920" elapsed="0.000023"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>DaeximKeywords.Verify Export Status</arg>
<arg>${EXPORT_COMPLETE_STATUS}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.233083" elapsed="0.000020"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.233348" elapsed="0.000024"/>
</kw>
<kw name="Verify Netconf Mount" owner="DaeximKeywords">
<arg>${NETCONF_EP_NAME}</arg>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<doc>Verify if a netconf endpoint is mounted</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.233584" elapsed="0.000023"/>
</kw>
<doc>schedule a basic export/backup with controller mounting itself as a netconf device</doc>
<tag>create backup</tag>
<status status="FAIL" start="2026-04-21T00:47:42.192252" elapsed="0.041488">Non-existing index or alias 'ClusterManagement__session_1'.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-21T00:47:42.234526" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.234445" elapsed="0.000129"/>
</kw>
<doc>Test suite for verifying basic export with a netconf mount</doc>
<status status="FAIL" start="2026-04-21T00:47:42.109725" elapsed="0.124881"/>
</suite>
<suite id="s1-s4" name="040-Export-Inclusions" source="/w/workspace/daexim-csit-1node-basic-only-vanadium/test/csit/suites/daexim/040-export-inclusions.robot">
<kw name="ClusterManagement_Setup" owner="ClusterManagement" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.308254" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.304656" elapsed="0.003626"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-21T00:47:42.308476" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-21T00:47:42.308377" elapsed="0.000140"/>
</branch>
<status status="PASS" start="2026-04-21T00:47:42.308357" elapsed="0.000183"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.308987" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.308677" elapsed="0.000352"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.309499" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-21T00:47:42.309174" elapsed="0.000351"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:42.310030" elapsed="0.000290"/>
</kw>
<msg time="2026-04-21T00:47:42.310419" level="INFO">${status} = PASS</msg>
<msg time="2026-04-21T00:47:42.310466" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-21T00:47:42.309712" elapsed="0.000777"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.311009" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-21T00:47:42.310639" elapsed="0.000396"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.311984" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.311725" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.312410" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-21T00:47:42.312143" elapsed="0.000293"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.312862" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-21T00:47:42.312576" elapsed="0.000312"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.315242" elapsed="0.000030"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-21T00:47:42.315069" elapsed="0.000273"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.312942" elapsed="0.002430"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.315870" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.315519" elapsed="0.000393"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.316413" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.316058" elapsed="0.000397"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.316942" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-21T00:47:42.316598" elapsed="0.000385"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-21T00:47:42.311275" elapsed="0.005766"/>
</kw>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-21T00:47:42.304363" elapsed="0.012737"/>
</kw>
<test id="s1-s4-t1" name="Create Module Include Export" line="11">
<kw name="Schedule Include Export" owner="DaeximKeywords">
<kw name="Convert To Integer" owner="BuiltIn">
<msg time="2026-04-21T00:47:42.318523" level="INFO">${controller_index} = 1</msg>
<var>${controller_index}</var>
<arg>${controller_index}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-21T00:47:42.318194" elapsed="0.000355"/>
</kw>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-04-21T00:47:42.319360" level="FAIL">Dictionary does not contain key '1'.</msg>
<var>${ip_address}</var>
<arg>dictionary=${ClusterManagement__index_to_ip_mapping}</arg>
<arg>key=${member_index}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.319063" elapsed="0.000386">Dictionary does not contain key '1'.</status>
</kw>
<return>
<value>${ip_address}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.319510" elapsed="0.000017"/>
</return>
<var>${host}</var>
<arg>${controller_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.318742" elapsed="0.000869">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${time}</var>
<arg>500</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.319760" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${file}</var>
<arg>${exclude}</arg>
<arg>${EXPORT_INCEXCLUDE_FILE}</arg>
<arg>${EXPORT_INCLUDE_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.319930" elapsed="0.000020"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<var>${json}</var>
<arg>${file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.320086" elapsed="0.000019"/>
</kw>
<kw name="Replace Variables" owner="BuiltIn">
<var>${json}</var>
<arg>${json}</arg>
<doc>Replaces variables in the given text with their current values.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.320232" elapsed="0.000019"/>
</kw>
<kw name="Cleanup The Export Files" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<doc>Verify if the export directory exists and delete the files if needed</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.320455" elapsed="0.000025"/>
</kw>
<kw name="Post_As_Json_To_Member" owner="ClusterManagement">
<var>${response_json}</var>
<arg>${SCHEDULE_EXPORT_URL}</arg>
<arg>${json}</arg>
<arg>${controller_index}</arg>
<doc>Send a POST with the supplied uri and data to member ${member_index}.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.324721" elapsed="0.000028"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response_json}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.324902" elapsed="0.000020"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>10 sec</arg>
<arg>5 sec</arg>
<arg>Verify Export Status</arg>
<arg>complete</arg>
<arg>${controller_index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.325058" elapsed="0.000020"/>
</kw>
<kw name="Verify Export Files" owner="DaeximKeywords">
<arg>${controller_index}</arg>
<doc>Verify if the backedup files are present in the controller</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.325336" elapsed="0.000024"/>
</kw>
<kw name="Copy Export Directory To Test VM" owner="DaeximKeywords">
<arg>${host}</arg>
<doc>This keyword copies the daexim folder genereated in the controller to robot vm. This is done to editing if needed on the json files</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.325608" elapsed="0.000024"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${export_file}</var>
<arg>'${store}' == 'operational'</arg>
<arg>${EXP_OPER_FILE}</arg>
<arg>${EXP_DATA_FILE}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.325773" elapsed="0.000021"/>
</kw>
<kw name="Join Path" owner="OperatingSystem">
<var>${file_path}</var>
<arg>${EXP_DIR}${host}</arg>
<arg>${export_file}</arg>
<doc>Joins the given path part(s) to the given base path.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.325934" elapsed="0.000019"/>
</kw>
<return>
<value>${file_path}</value>
<status status="NOT RUN" start="2026-04-21T00:47:42.325997" elapsed="0.000017"/>
</return>
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>network-topology</arg>
<arg>${FALSE}</arg>
<doc>Schedules a export with include option. Returns the file that has the included export.</doc>
<status status="FAIL" start="2026-04-21T00:47:42.317785" elapsed="0.008310">Dictionary does not contain key '1'.</status>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<var>${lines1}</var>
<arg>${file1}</arg>
<arg>network-topology:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.326249" elapsed="0.000021"/>
</kw>
<kw name="Should Not Be Empty" owner="BuiltIn">
<arg>${lines1}</arg>
<doc>Verifies that the given item is not empty.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.326417" elapsed="0.000021"/>
</kw>
<kw name="Schedule Include Export" owner="DaeximKeywords">
<var>${file1}</var>
<arg>${FIRST_CONTROLLER_INDEX}</arg>
<arg>config</arg>
<arg>network-topology</arg>
<arg>${TRUE}</arg>
<doc>Schedules a export with include option. Returns the file that has the included export.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.326685" elapsed="0.000023"/>
</kw>
<kw name="Grep File" owner="OperatingSystem">
<var>${lines1}</var>
<arg>${file1}</arg>
<arg>network-topology:</arg>
<doc>Returns the lines of the specified file that match the ``pattern``.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.326853" elapsed="0.000020"/>
</kw>
<kw name="Should Be Empty" owner="BuiltIn">
<arg>${lines1}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="NOT RUN" start="2026-04-21T00:47:42.327017" elapsed="0.000021"/>
</kw>
<doc>schedule a basic export/backup with applied inclusion pattern</doc>
<tag>export</tag>
<tag>inclusions</tag>
<status status="FAIL" start="2026-04-21T00:47:42.317152" elapsed="0.010010">Dictionary does not contain key '1'.</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-04-21T00:47:42.327756" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-04-21T00:47:42.327677" elapsed="0.000127"/>
</kw>
<doc>Test suite for verifying basic export with inclusions</doc>
<status status="FAIL" start="2026-04-21T00:47:42.235458" elapsed="0.092376"/>
</suite>
<status status="FAIL" start="2026-04-21T00:47:41.218780" elapsed="1.109852"/>
</suite>
<statistics>
<total>
<stat pass="2" fail="7" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="2" fail="1" skip="0">absolute time export</stat>
<stat pass="0" fail="1" skip="0">cancel export</stat>
<stat pass="0" fail="1" skip="0">create backup</stat>
<stat pass="0" fail="1" skip="0">create restore</stat>
<stat pass="0" fail="1" skip="0">exclude export</stat>
<stat pass="0" fail="1" skip="0">export</stat>
<stat pass="0" fail="1" skip="0">inclusions</stat>
<stat pass="0" fail="1" skip="0">wildcard exclude export</stat>
</tag>
<suite>
<stat name="daexim-basic.txt" id="s1" pass="2" fail="7" skip="0">daexim-basic.txt</stat>
<stat name="010-Special-Export" id="s1-s1" pass="2" fail="4" skip="0">daexim-basic.txt.010-Special-Export</stat>
<stat name="020-Import-Basic" id="s1-s2" pass="0" fail="1" skip="0">daexim-basic.txt.020-Import-Basic</stat>
<stat name="030-Export-Basic" id="s1-s3" pass="0" fail="1" skip="0">daexim-basic.txt.030-Export-Basic</stat>
<stat name="040-Export-Inclusions" id="s1-s4" pass="0" fail="1" skip="0">daexim-basic.txt.040-Export-Inclusions</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
