Do not use DEVICE_COUNT in NetconfKeywords
[integration/test.git] / csit / libraries / NetconfKeywords.robot
index ec0dd0aaea314bf2996609c274e6233c83cade86..74f6b8cda962d96b844f2dc17118cdd3989be294 100644 (file)
@@ -12,13 +12,18 @@ Documentation     Perform complex operations on netconf.
 ...               netconf operations into reusable keywords to make writing netconf
 ...               test suites easier.
 Library           Collections
+Library           DateTime
 Library           RequestsLibrary
 Resource          NetconfViaRestconf.robot
+Resource          NexusKeywords.robot
 Resource          SSHKeywords.robot
 
 *** Variables ***
+${TESTTOOL_DEFAULT_JAVA_OPTIONS}    -Xmx1G -XX:MaxPermSize=256M -Dorg.apache.sshd.registerBouncyCastle=false
 ${DIRECTORY_WITH_DEVICE_TEMPLATES}    ${CURDIR}/../variables/netconf/device
 ${FIRST_TESTTOOL_PORT}    17830
+${BASE_NETCONF_DEVICE_PORT}    17830
+${DEVICE_NAME_BASE}    netconf-scaling-device
 
 *** Keywords ***
 Setup_NetconfKeywords
@@ -121,29 +126,24 @@ NetconfKeywords__Check_Device_Is_Up
     BuiltIn.Should_Be_Equal_As_Integers    ${count}    1
 
 Install_And_Start_Testtool
-    [Arguments]    ${device-count}=10    ${debug}=true    ${schemas}=none
+    [Arguments]    ${device-count}=10    ${debug}=true    ${schemas}=none    ${tool_options}=${EMPTY}    ${java_options}=${TESTTOOL_DEFAULT_JAVA_OPTIONS}
     [Documentation]    Install and run testtool. Also arrange to collect its output into a log file.
     ...    When the ${schemas} argument is set to 'none', it signifies that
     ...    there are no additional schemas to be deployed, so the directory
     ...    for the additional schemas is deleted on the remote machine and
     ...    the additional schemas argument is left out.
     # Install test tool on the machine.
-    # TODO: The "urlbase" line is very similar to what pcep suites do. Reduce this code duplication.
-    ${urlbase}=    BuiltIn.Set_Variable    ${NEXUSURL_PREFIX}/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool
-    ${version}=    SSHLibrary.Execute_Command    curl ${urlbase}/maven-metadata.xml | grep '<version>' | cut -d '>' -f 2 | cut -d '<' -f 1
-    BuiltIn.Log    ${version}
-    ${namepart}=    SSHLibrary.Execute_Command    curl ${urlbase}/${version}/maven-metadata.xml | grep value | head -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1
-    BuiltIn.Log    ${namepart}
-    BuiltIn.Set_Suite_Variable    ${filename}    netconf-testtool-${namepart}-executable.jar
-    BuiltIn.Log    ${filename}
-    ${response}=    SSHLibrary.Execute_Command    curl ${urlbase}/${version}/${filename} >${filename}
-    BuiltIn.Log    ${response}
+    ${filename}=    NexusKeywords.Deploy_Test_Tool    netconf/netconf-testtool
     ${schemas_option}=    NetconfKeywords__Deploy_Additional_Schemas    ${schemas}
     # Start the testtool
-    SSHLibrary.Write    java -Xmx1G -XX:MaxPermSize=256M -jar ${filename} --device-count ${device-count} --debug ${debug} ${schemas_option} >testtool.log 2>&1
+    ${command}    BuiltIn.Set_Variable    java ${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option}
+    BuiltIn.Log    Running testtool: ${command}
+    SSHLibrary.Write    ${command} >testtool.log 2>&1
     # Wait for the testtool to boot up.
     ${timeout}=    BuiltIn.Evaluate    (${device-count}/3)+5
     BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}s    1s    NetconfKeywords__Check_Device_Is_Up    ${FIRST_TESTTOOL_PORT}
+    # Store information needed by other keywords.
+    BuiltIn.Set_Suite_Variable    ${NetconfKeywords__testtool_device_count}    ${device-count}
 
 Check_Device_Up_And_Running
     [Arguments]    ${device-number}
@@ -160,3 +160,21 @@ Stop_Testtool
     # "Interrupt_Program_And_Download_Its_Log" which will get an argument stating the name of
     # the log file to get.
     SSHLibrary.Get_File    testtool.log
+
+NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device
+    [Arguments]    ${operation}    ${deadline_Date}
+    ${current_Date}=    DateTime.Get_Current_Date
+    ${ellapsed_seconds}=    DateTime.Subtract_Date_From_Date    ${deadline_Date}    ${current_Date}
+    BuiltIn.Run_Keyword_If    ${ellapsed_seconds}<0    Fail    The global time out period expired
+    ${number}=    BuiltIn.Evaluate    ${current_port}-${BASE_NETCONF_DEVICE_PORT}+1
+    BuiltIn.Wait_Until_Keyword_Succeeds    10s    1s    NetconfKeywords.Check_Device_Up_And_Running    ${number}
+    BuiltIn.Run_Keyword    ${operation}    ${DEVICE_NAME_BASE}-${number}
+    ${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
+    ${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}