*** Settings ***
Documentation Perform complex operations on netconf.
...
-... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+... Copyright (c) 2015,2017 Cisco Systems, Inc. and others. All rights reserved.
...
... This program and the accompanying materials are made available under the
... terms of the Eclipse Public License v1.0 which accompanies this distribution,
... This library encapsulates a bunch of somewhat complex and commonly used
... netconf operations into reusable keywords to make writing netconf
... test suites easier.
+...
+... TODO: RemoteBash.robot contains logic which could be reused here.
Library Collections
Library DateTime
Library RequestsLibrary
Resource SSHKeywords.robot
Resource TemplatedRequests.robot
Resource Utils.robot
+Resource RemoteBash.robot
+Resource CompareStream.robot
*** Variables ***
${TESTTOOL_DEFAULT_JAVA_OPTIONS} -Xmx1G -XX:MaxPermSize=256M -Dorg.apache.sshd.registerBouncyCastle=false
${FIRST_TESTTOOL_PORT} 17830
${BASE_NETCONF_DEVICE_PORT} 17830
${DEVICE_NAME_BASE} netconf-scaling-device
+${TESTTOOL_DEFAULT_URL} https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/netconf/netconf-testtool/1.3.2/netconf-testtool-1.3.2-executable.jar
${TESTTOOL_BOOT_TIMEOUT} 60s
${ENABLE_NETCONF_TEST_TIMEOUT} ${ENABLE_GLOBAL_TEST_DEADLINES}
[Documentation] Setup the environment for the other keywords of this Resource to work properly.
${tmp}= BuiltIn.Create_Dictionary
BuiltIn.Set_Suite_Variable ${NetconfKeywords__mounted_device_types} ${tmp}
- BuiltIn.Run_Keyword_If ${create_session_for_templated_requests} TemplatedRequests.Create_Default_Session
+ BuiltIn.Run_Keyword_If ${create_session_for_templated_requests} TemplatedRequests.Create_Default_Session timeout=2
NexusKeywords.Initialize_Artifact_Deployment_And_Usage
Configure_Device_In_Netconf
[Arguments] ${device_name} ${device_type}=default ${device_port}=${FIRST_TESTTOOL_PORT} ${device_address}=${TOOLS_SYSTEM_IP} ${device_user}=admin ${device_password}=topsecret
- ... ${session}=default
+ ... ${device_key}=device-key ${session}=default ${schema_directory}=/tmp/schema ${http_timeout}=${EMPTY} ${http_method}=put
[Documentation] Tell Netconf about the specified device so it can add it into its configuration.
- ${template_as_string}= BuiltIn.Set_Variable {'DEVICE_IP': '${device_address}', 'DEVICE_NAME': '${device_name}', 'DEVICE_PORT': '${device_port}', 'DEVICE_USER': '${device_user}', 'DEVICE_PASSWORD': '${device_password}'}
- TemplatedRequests.Put_As_Xml_Templated ${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type} ${template_as_string} session=${session}
+ ${mapping}= BuiltIn.Create_dictionary DEVICE_IP=${device_address} DEVICE_NAME=${device_name} DEVICE_PORT=${device_port} DEVICE_USER=${device_user} DEVICE_PASSWORD=${device_password}
+ ... DEVICE_KEY=${device_key} SCHEMA_DIRECTORY=${schema_directory}
+ # TODO: Is it possible to use &{kwargs} as a mapping directly?
+ Run Keyword if '${http_method}'=='post' TemplatedRequests.Post_As_Xml_Templated folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type} mapping=${mapping} session=${session} http_timeout=${http_timeout}
+ ... 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}
Count_Netconf_Connectors_For_Device
Builtin.Should_Contain ${device_status} "netconf-node-topology:connection-status": "connected"
Wait_Device_Connected
- [Arguments] ${device_name} ${timeout}=10s ${period}=1s ${session}=default
+ [Arguments] ${device_name} ${timeout}=20s ${period}=1s ${session}=default
[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}
Remove_Device_From_Netconf
- [Arguments] ${device_name} ${session}=default
+ [Arguments] ${device_name} ${session}=default ${location}=location
[Documentation] Tell Netconf to deconfigure the specified device
${device_type}= Collections.Pop_From_Dictionary ${NetconfKeywords__mounted_device_types} ${device_name}
${template_as_string}= BuiltIn.Set_Variable {'DEVICE_NAME': '${device_name}'}
- TemplatedRequests.Delete_Templated ${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type} ${template_as_string} session=${session}
+ TemplatedRequests.Delete_Templated ${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${device_type} ${template_as_string} session=${session} location=${location}
Wait_Device_Fully_Removed
[Arguments] ${device_name} ${timeout}=10s ${period}=1s ${session}=default
... for the additional schemas is deleted on the remote machine and
... the additional schemas argument is left out.
# Install test tool on the machine.
- ${filename}= NexusKeywords.Deploy_Test_Tool netconf netconf-testtool
+ # Note that after nitrogen we have to use nitrogen release version because tool is broken in oxygen onwards.
+ ${explicit_url}= CompareStream.Set_Variable_If_At_Most_Nitrogen ${EMPTY} ${TESTTOOL_DEFAULT_URL}
+ ${filename}= NexusKeywords.Deploy_Test_Tool netconf netconf-testtool explicit_url=${explicit_url}
${schemas_option}= NetconfKeywords__Deploy_Additional_Schemas ${schemas}
# Start the testtool
${command}= NexusKeywords.Compose_Full_Java_Command ${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option} --md-sal ${mdsal}
Stop_Testtool
[Documentation] Stop testtool and download its log.
- Utils.Write_Bare_Ctrl_C
+ RemoteBash.Write_Bare_Ctrl_C
SSHLibrary.Read_Until_Prompt
# TODO: Unify with play.py and pcc-mock handling.
# TODO: Maybe this keyword's content shall be moved into SSHUtils and named somewhat like