... 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 ***
${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
[Arguments] ${device_name}
[Documentation] Check that the specified device has no Netconf connectors nor associated data.
Check_Device_Has_No_Netconf_Connector ${device_name}
- ${uri}= Builtin.Set_Variable network-topology:network-topology/topology/topology-netconf/node/${device_name}/yang-ext:mount
+ ${uri}= Builtin.Set_Variable network-topology:network-topology/topology/topology-netconf/node/${device_name}
${response}= RequestsLibrary.Get Request nvr_session ${uri} ${ACCEPT_XML}
BuiltIn.Should_Be_Equal_As_Integers ${response.status_code} 404
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 ${options}=${EMPTY}
[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 -Xmx1G -XX:MaxPermSize=256M -jar ${filename} ${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}
# "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}=${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}