... netconf operations into reusable keywords to make writing netconf
... test suites easier.
Library SSHLibrary
+Library String
Resource SSHKeywords.robot
*** Keywords ***
... Create and activate a connection to the tools system and perform
... additional configuration to allow the remaining keywords to deploy
... and use artifacts from Nexus on the tools system.
- SSHKeywords.Open_Connection_To_Tools_System
+ # Connect to the ODL machine
+ ${odl}= SSHKeywords.Open_Connection_To_ODL_System
+ # Deploy the search tool.
+ SSHLibrary.Put_File ${CURDIR}/../../tools/deployment/search.sh
+ SSHLibrary.Close_Connection
+ # Connect to the Tools System machine
+ ${tools}= SSHKeywords.Open_Connection_To_Tools_System
+ BuiltIn.Set_Suite_Variable ${SSHKeywords__tools_system_connection} ${tools}
-NexusKeywords__Get_Version_From_Metadata
- ${version}= SSHLibrary.Execute_Command cat metadata.xml | grep latest | cut -d '>' -f 2 | cut -d '<' -f 1
+NexusKeywords__Get_Items_To_Look_At
+ [Arguments] ${component}
+ [Documentation] Get a list of items that might contain the version number that we are looking for.
+ BuiltIn.Return_From_Keyword_If '${component}' == 'bgpcep' pcep-impl
+ [Return] ${component}-impl
+
+NexusKeywords__Detect_Version_To_Pull
+ [Arguments] ${component}
+ [Documentation] Determine the exact Nexus directory to be used as a source for a particular test tool
+ ... Figure out what version of the tool needs to be pulled out of the
+ ... Nexus by looking at the version directory of the subsystem from
+ ... which the tool is being pulled. This code is REALLY UGLY but there
+ ... is no way around it until the bug
+ ... https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
+ ... I also don't want to depend on maven-metadata-local.xml and other
+ ... bits and pieces of ODL distribution which are not required for ODL
+ ... to function properly.
+ ${itemlist}= NexusKeywords__Get_Items_To_Look_At ${component}
+ ${current_ssh_connection}= SSHLibrary.Get Connection
+ SSHKeywords.Open_Connection_To_ODL_System
+ ${version} ${result}= SSHLibrary.Execute_Command sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist} return_rc=True
+ SSHLibrary.Close_Connection
+ Restore Current SSH Connection From Index ${current_ssh_connection.index}
BuiltIn.Log ${version}
- BuiltIn.Return_From_Keyword_If '${version}' != '' ${version}
- ${version}= SSHLibrary.Execute_Command cat metadata.xml | grep '<version>' | sort | tail -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1
- BuiltIn.Return_From_Keyword_If '${version}' != '' ${version}
- BuiltIn.Fail Unrecognized metadata format, cannot determine the location of the requested artifact.
+ BuiltIn.Run_Keyword_If ${result}!=0 BuiltIn.Fail Component "${component}" not found, cannot locate test tool
+ ${version} ${location}= String.Split_String ${version} max_split=1
+ [Return] ${version} ${location}
Deploy_Artifact
[Arguments] ${component} ${artifact} ${name_prefix} ${name_suffix}=-executable.jar ${type}=snapshot
[Documentation] Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
- ${urlbase}= BuiltIn.Set_Variable ${NEXUSURL_PREFIX}/content/repositories/opendaylight.${type}/org/opendaylight/${component}/${artifact}
- ${response}= SSHLibrary.Execute_Command curl ${urlbase}/maven-metadata.xml >metadata.xml
- BuiltIn.Log ${response}
+ ${urlbase}= BuiltIn.Set_Variable ${NEXUSURL_PREFIX}/content/repositories/opendaylight.${type}
+ ${version} ${location}= NexusKeywords__Detect_Version_To_Pull ${component}
# TODO: Use RequestsLibrary and String instead of curl and bash utilities?
- ${version}= NexusKeywords__Get_Version_From_Metadata
- ${namepart}= SSHLibrary.Execute_Command curl ${urlbase}/${version}/maven-metadata.xml | grep value | head -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1
+ ${url}= BuiltIn.Set_Variable ${urlbase}/${location}/${artifact}/${version}
+ ${namepart}= SSHLibrary.Execute_Command curl ${url}/maven-metadata.xml | grep value | head -n 1 | cut -d '>' -f 2 | cut -d '<' -f 1
BuiltIn.Log ${namepart}
${length}= BuiltIn.Get_Length ${namepart}
BuiltIn.Run_Keyword_If ${length} == 0 BuiltIn.Fail Artifact "${artifact}" not found in component "${component}"
${filename}= BuiltIn.Set_Variable ${name_prefix}${namepart}${name_suffix}
BuiltIn.Log ${filename}
- ${url}= BuiltIn.Set_Variable ${urlbase}/${version}/${filename}
+ ${url}= BuiltIn.Set_Variable ${url}/${filename}
${response} ${result}= SSHLibrary.Execute_Command wget -q -N ${url} 2>&1 return_rc=True
BuiltIn.Log ${response}
BuiltIn.Run_Keyword_If ${result} != 0 BuiltIn.Fail Artifact "${artifact}" in component "${component}" could not be downloaded from ${url}
--- /dev/null
+# Search the specified directory (parameter $1) for the specified items (the
+# remaining parameters). The "item" is expected to be a directory located
+# somewhere along the directory tree at which $1 points. This directory must
+# have exactly 1 subdirectory and that subdirectory's name is considered to
+# be the version number we are looking for.
+#
+# This tool searches for these items in the order specified and emits the
+# first version number it finds. Using an one-line shell script for this task
+# turned out to be pretty impossible as the algorithm is quite complicated
+# (the "items" may move around the directory tree between releases and even
+# some of them might disappear and the others appear) so a full blown utility
+# is necessary.
+
+exec 2>&1
+set -e
+directory=$1
+shift
+if test -d $directory; then :; else
+ echo "Path '$directory' does not exist or is not a directory"
+ exit 1
+fi
+if test -d $directory/org/opendaylight; then :; else
+ echo "Path '$directory' does not look like OpenDaylight System directory"
+ exit 1
+fi
+file_list=`pwd`/filelist.tmp
+trap "rm -f $file_list" EXIT
+version_found="n/a"
+finish=false
+for Thing in $@; do
+ cd $directory
+ find . -name $Thing -type d -print >$file_list
+ exec <$file_list
+ while read -r directory_to_check; do
+ cd $directory_to_check
+ for file_in_checked_directory in *; do
+ if test -d $file_in_checked_directory; then
+ if test "$version_found" = "n/a"; then
+ version_found=$file_in_checked_directory
+ where_found=$directory_to_check
+ finish=true
+ else
+ version_found="n/a"
+ finish=false
+ break
+ fi
+ fi
+ done
+ if $finish; then
+ break
+ fi
+ done
+ if $finish; then
+ break
+ fi
+done
+if $finish; then
+ echo $version_found
+ dirname $where_found | cut -b 3-
+else
+ echo "None of the supplied components were found."
+ exit 1
+fi