Use ${DELETED_STATUS_CODES} instead of hard-coded value
[integration/test.git] / csit / libraries / NetconfKeywords.robot
index 455d36e2d51f9e21ad27420434cac2c74f426ba0..810476c26310374b4652c3c1d620f5c10ec219ff 100644 (file)
@@ -18,13 +18,15 @@ Library           DateTime
 Library           RequestsLibrary
 Library           SSHLibrary
 Resource          NexusKeywords.robot
+Resource          Restconf.robot
 Resource          SSHKeywords.robot
 Resource          TemplatedRequests.robot
 Resource          Utils.robot
 Resource          RemoteBash.robot
 
 *** Variables ***
-${TESTTOOL_DEFAULT_JAVA_OPTIONS}    -Xmx1G
+${MAX_HEAP}       1G
+${TESTTOOL_DEFAULT_JAVA_OPTIONS}    -Xmx${MAX_HEAP}
 ${DIRECTORY_WITH_DEVICE_TEMPLATES}    ${CURDIR}/../variables/netconf/device
 ${FIRST_TESTTOOL_PORT}    17830
 ${BASE_NETCONF_DEVICE_PORT}    17830
@@ -52,6 +54,21 @@ Configure_Device_In_Netconf
     ...    ELSE    TemplatedRequests.Put_As_Xml_Templated    folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type}    mapping=${mapping}    session=${session}    http_timeout=${http_timeout}
     Collections.Set_To_Dictionary    ${NetconfKeywords__mounted_device_types}    ${device_name}    ${device_type}
 
+Configure_Device
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for configuring the device.
+    KarafKeywords.Log_Message_To_Controller_Karaf    Configuring device ${current_name} to Netconf
+    Configure_Device_In_Netconf    ${current_name}    device_type=${device_type}    device_port=${current_port}
+    KarafKeywords.Log_Message_To_Controller_Karaf    Device ${current_name} configured
+
+Configure_Device_And_Verify
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for configuring the device in the Netconf subsystem and connecting to it.
+    Configure_Device    ${current_name}    ${log_response}
+    KarafKeywords.Log_Message_To_Controller_Karaf    Waiting for device ${current_name} to connect
+    Wait_Device_Connected    ${current_name}    period=0.5s
+    KarafKeywords.Log_Message_To_Controller_Karaf    Device ${current_name} connected
+
 Count_Netconf_Connectors_For_Device
     [Arguments]    ${device_name}    ${session}=default
     [Documentation]    Count all instances of the specified device in the Netconf topology (usually 0 or 1).
@@ -59,11 +76,19 @@ Count_Netconf_Connectors_For_Device
     # This keyword should be renamed but without an automatic keyword naming standards checker this is
     # potentially destabilizing change so right now it is as FIXME. Proposed new name:
     # Count_Device_Instances_In_Netconf_Topology
-    ${mounts}=    TemplatedRequests.Get_As_Json_From_Uri    ${OPERATIONAL_API}/network-topology:network-topology/topology/topology-netconf    session=${session}
+    ${uri} =    Restconf.Generate URI    network-topology:network-topology    operational
+    ${mounts}=    TemplatedRequests.Get_As_Json_From_Uri    ${uri}    session=${session}
     Builtin.Log    ${mounts}
     ${actual_count}=    Builtin.Evaluate    len('''${mounts}'''.split('"node-id": "${device_name}"'))-1
     Builtin.Return_From_Keyword    ${actual_count}
 
+Wait_Connected
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for waiting until the device is connected.
+    KarafKeywords.Log_Message_To_Controller_Karaf    Waiting for device ${current_name} to connect
+    Wait_Device_Connected    ${current_name}    period=0.5s    timeout=300s
+    KarafKeywords.Log_Message_To_Controller_Karaf    Device ${current_name} connected
+
 Check_Device_Has_No_Netconf_Connector
     [Arguments]    ${device_name}    ${session}=default
     [Documentation]    Check that there are no instances of the specified device in the Netconf topology.
@@ -74,25 +99,26 @@ Check_Device_Has_No_Netconf_Connector
     Builtin.Should_Be_Equal_As_Strings    ${count}    0
 
 Check_Device_Completely_Gone
-    [Arguments]    ${device_name}    ${session}=default
+    [Arguments]    ${device_name}    ${session}=default    ${log_response}=True
     [Documentation]    Check that the specified device has no Netconf connectors nor associated data.
     Check_Device_Has_No_Netconf_Connector    ${device_name}    session=${session}
-    ${uri}=    Builtin.Set_Variable    ${CONFIG_API}/network-topology:network-topology/topology/topology-netconf/node/${device_name}
-    ${status}    ${response}=    BuiltIn.Run_Keyword_And_Ignore_Error    TemplatedRequests.Get_As_Xml_From_Uri    ${uri}    session=${session}
+    ${uri} =    Restconf.Generate URI    network-topology:network-topology    config    topology=topology-netconf    node=${device_name}
+    ${status}    ${response}=    BuiltIn.Run_Keyword_And_Ignore_Error    TemplatedRequests.Get_As_Xml_From_Uri    ${uri}    session=${session}    log_response=${log_response}
     BuiltIn.Should_Be_Equal_As_Strings    ${status}    FAIL
-    BuiltIn.Should_Contain    ${response}    404
+    BuiltIn.Should_Contain    ${response}    ${DELETED_STATUS_CODES}
 
 Check_Device_Connected
-    [Arguments]    ${device_name}    ${session}=default
+    [Arguments]    ${device_name}    ${session}=default    ${log_response}=True
     [Documentation]    Check that the specified device is accessible from Netconf.
-    ${device_status}=    TemplatedRequests.Get_As_Json_From_Uri    ${OPERATIONAL_API}/network-topology:network-topology/topology/topology-netconf/node/${device_name}    session=${session}
+    ${uri} =    Restconf.Generate URI    network-topology:network-topology    operational    topology=topology-netconf    node=${device_name}
+    ${device_status}=    TemplatedRequests.Get_As_Json_From_Uri    ${uri}    session=${session}    log_response=${log_response}
     Builtin.Should_Contain    ${device_status}    "netconf-node-topology:connection-status": "connected"
 
 Wait_Device_Connected
-    [Arguments]    ${device_name}    ${timeout}=20s    ${period}=1s    ${session}=default
+    [Arguments]    ${device_name}    ${timeout}=20s    ${period}=1s    ${session}=default    ${log_response}=True
     [Documentation]    Wait for the device to become connected.
     ...    It is more readable to use this keyword in a test case than to put the whole WUKS below into it.
-    BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    ${period}    Check_Device_Connected    ${device_name}    session=${session}
+    BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    ${period}    Check_Device_Connected    ${device_name}    session=${session}    log_response=${log_response}
 
 Remove_Device_From_Netconf
     [Arguments]    ${device_name}    ${session}=default    ${location}=location
@@ -101,8 +127,28 @@ Remove_Device_From_Netconf
     ${template_as_string}=    BuiltIn.Set_Variable    {'DEVICE_NAME': '${device_name}'}
     TemplatedRequests.Delete_Templated    ${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type}    ${template_as_string}    session=${session}    location=${location}
 
+Deconfigure_Device
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for deconfiguring the device.
+    KarafKeywords.Log_Message_To_Controller_Karaf    Deconfiguring device ${current_name}
+    Remove_Device_From_Netconf    ${current_name}
+    KarafKeywords.Log_Message_To_Controller_Karaf    Device ${current_name} deconfigured
+
+Deconfigure_Device_And_Verify
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for deconfiguring the device from Netconf.
+    Deconfigure_Device    ${current_name}    ${log_response}
+    Check_Device_Deconfigured    ${current_name}
+
+Check_Device_Deconfigured
+    [Arguments]    ${current_name}    ${log_response}=True
+    [Documentation]    Operation for making sure the device is really deconfigured.
+    KarafKeywords.Log_Message_To_Controller_Karaf    Waiting for device ${current_name} to disappear
+    Wait_Device_Fully_Removed    ${current_name}    period=0.5s    timeout=120s
+    KarafKeywords.Log_Message_To_Controller_Karaf    Device ${current_name} removed
+
 Wait_Device_Fully_Removed
-    [Arguments]    ${device_name}    ${timeout}=10s    ${period}=1s    ${session}=default
+    [Arguments]    ${device_name}    ${timeout}=10s    ${period}=1s    ${session}=default    ${log_response}=True
     [Documentation]    Wait until all netconf connectors for the device with the given name disappear.
     ...    Call of Remove_Device_From_Netconf returns before netconf gets
     ...    around deleting the device's connector. To ensure the device is
@@ -111,7 +157,7 @@ Wait_Device_Fully_Removed
     ...    is not made before using this keyword, the wait will fail.
     ...    Using this keyword is more readable than putting the WUKS below
     ...    into a test case.
-    BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    ${period}    Check_Device_Completely_Gone    ${device_name}    session=${session}
+    BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    ${period}    Check_Device_Completely_Gone    ${device_name}    session=${session}    log_response=${log_response}
 
 NetconfKeywords__Deploy_Additional_Schemas
     [Arguments]    ${schemas}
@@ -139,6 +185,7 @@ NetconfKeywords__Deploy_Additional_Schemas
     # directory from the point of view of the process running on that
     # machine.
     SSHLibrary.Put_Directory    ${schemas}    destination=./schemas
+    SSHLibrary.List_Directory    ./schemas
     [Return]    --schemas-dir ./schemas
 
 NetconfKeywords__Deploy_Custom_RPC
@@ -157,7 +204,7 @@ NetconfKeywords__Check_Device_Is_Up
     BuiltIn.Should_Be_Equal_As_Integers    ${count}    1
 
 NetconfKeywords__Wait_Device_Is_Up_And_Running
-    [Arguments]    ${device_name}
+    [Arguments]    ${device_name}    ${log_response}=True
     ${number}=    BuiltIn.Evaluate    '${device_name}'.split('-').pop()
     BuiltIn.Wait_Until_Keyword_Succeeds    ${TESTTOOL_BOOT_TIMEOUT}    1s    Check_Device_Up_And_Running    ${number}
 
@@ -213,16 +260,16 @@ NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired
     BuiltIn.Run_Keyword_If    ${ellapsed_seconds}<0    Fail    The global time out period expired
 
 NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device
-    [Arguments]    ${operation}    ${deadline_Date}
+    [Arguments]    ${operation}    ${deadline_Date}    ${log_response}=True
     NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired    ${deadline_Date}
     ${number}=    BuiltIn.Evaluate    ${current_port}-${BASE_NETCONF_DEVICE_PORT}+1
-    BuiltIn.Run_Keyword    ${operation}    ${DEVICE_NAME_BASE}-${number}
+    BuiltIn.Run_Keyword    ${operation}    ${DEVICE_NAME_BASE}-${number}    log_response=${log_response}
     ${next}=    BuiltIn.Evaluate    ${current_port}+1
     BuiltIn.Set_Suite_Variable    ${current_port}    ${next}
 
 Perform_Operation_On_Each_Device
-    [Arguments]    ${operation}    ${count}=${NetconfKeywords__testtool_device_count}    ${timeout}=30m
+    [Arguments]    ${operation}    ${count}=${NetconfKeywords__testtool_device_count}    ${timeout}=30m    ${log_response}=True
     ${current_Date}=    DateTime.Get_Current_Date
     ${deadline_Date}=    DateTime.Add_Time_To_Date    ${current_Date}    ${timeout}
     BuiltIn.Set_Suite_Variable    ${current_port}    ${BASE_NETCONF_DEVICE_PORT}
-    BuiltIn.Repeat_Keyword    ${count} times    NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device    ${operation}    ${deadline_Date}
+    BuiltIn.Repeat_Keyword    ${count} times    NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device    ${operation}    ${deadline_Date}    log_response=${log_response}