X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FNexusKeywords.robot;h=850711e5d0c9066e2a05298459b1da230320fd58;hb=9f074b03bf384dcb18179e76a1a1fe642a47900c;hp=83105a711a47ccc24bbeec24a0a6dc565d8e6e5e;hpb=5fe9599fa87cb677ab518add53a143e6c2ed6d6b;p=integration%2Ftest.git diff --git a/csit/libraries/NexusKeywords.robot b/csit/libraries/NexusKeywords.robot index 83105a711a..850711e5d0 100644 --- a/csit/libraries/NexusKeywords.robot +++ b/csit/libraries/NexusKeywords.robot @@ -11,57 +11,111 @@ Documentation Nexus repository access keywords. ... This library encapsulates a bunch of somewhat complex and commonly used ... netconf operations into reusable keywords to make writing netconf ... test suites easier. +Library OperatingSystem Library SSHLibrary +Library String Resource SSHKeywords.robot +*** Variables *** +${NEXUS_FALLBACK_URL} ${NEXUSURL_PREFIX}/content/repositories/opendaylight.snapshot + *** Keywords *** Initialize_Artifact_Deployment_And_Usage - [Documentation] Initialize Nexus artifact deployment and usage - ... 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. + [Arguments] ${tools_system_connect}=True + [Documentation] Places search utility to ODL system, which will be needed for version detection. + ... By default also initialize a SSH connection to Tools system, + ... as following Keywords assume a working connection towards target 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 + # Optionally connect to the Tools System machine. + BuiltIn.Return_From_Keyword_If not (${tools_system_connect}) # the argument may be a convoluted Python expression SSHKeywords.Open_Connection_To_Tools_System -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 '' | 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] ${directory} ${name_prefix} ${name_suffix}=-executable.jar ${type}=snapshot + [Arguments] ${component} ${artifact} ${name_prefix} ${name_suffix}=-executable.jar ${fallback_url}=${NEXUS_FALLBACK_URL} [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/${directory} - ${response}= SSHLibrary.Execute_Command curl ${urlbase}/maven-metadata.xml >metadata.xml - BuiltIn.Log ${response} + ... Must have ${BUNDLE_URL} variable set to the URL from which the + ... tested ODL distribution was downloaded and this place must be + ... inside a repository created by a standard distribution + ... construction job. If this is detected to ne be the case, fallback URL is used. + ${urlbase}= String.Fetch_From_Left ${BUNDLE_URL} /org/opendaylight + # If the BUNDLE_URL points somewhere else (perhaps *patch-test* job in Jenkins), + # ${urlbase} is the whole ${BUNDLE_URL}, in which case we use the ${fallback_url} + ${urlbase}= BuiltIn.Set_Variable_If '${urlbase}' != '${BUNDLE_URL}' ${urlbase} ${fallback_url} + ${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}" + ${namepart}= BuiltIn.Set_Variable_If ${length} == 0 ${version} ${namepart} ${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} [Return] ${filename} Deploy_Test_Tool - [Arguments] ${name} ${suffix}=executable ${type}=snapshot + [Arguments] ${component} ${artifact} ${suffix}=executable [Documentation] Deploy a test tool. ... The test tools have naming convention of the form - ... "${type}/some/dir/somewhere//--${suffix}.jar" + ... "/some/dir/somewhere//--${suffix}.jar" ... where "" is the name of the tool and "" is ... the version tag that is digged out of the maven metadata. This ... keyword calculates ${name_prefix} and ${name_suffix} for ... "Deploy_Artifact" and then calls "Deploy_Artifact" to do the real ... work of deploying the artifact. - ${name_part}= BuiltIn.Evaluate '${name}'.split("/").pop() - ${name_prefix}= BuiltIn.Set_Variable ${name_part}- + ${name_prefix}= BuiltIn.Set_Variable ${artifact}- ${name_suffix}= BuiltIn.Set_Variable -${suffix}.jar - ${filename}= Deploy_Artifact ${name} ${name_prefix} ${name_suffix} ${type} + ${filename}= Deploy_Artifact ${component} ${artifact} ${name_prefix} ${name_suffix} [Return] ${filename} + +Compose_Base_Java_Command + [Arguments] ${openjdk}=${JDKVERSION} + [Documentation] Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed. + ... Not directly related to nexus, but different versioned Java artifacts may need this. + BuiltIn.Return_From_Keyword_If """${openjdk}""" == "openjdk8" /usr/lib/jvm/java-1.8.0/bin/java + BuiltIn.Return_From_Keyword_If """${openjdk}""" == "openjdk7" /usr/lib/jvm/java-1.7.0/bin/java + BuiltIn.Return_From_Keyword java + +Compose_Full_Java_Command + [Arguments] ${options} ${openjdk}=${JDKVERSION} + [Documentation] Return full Bash command to run Java with given options. + ... The options may include JVM options, application command line arguments, Bash redirects and other constructs. + ${base_command} = Compose_Base_Java_Command openjdk=${openjdk} + ${full_command} = BuiltIn.Set_Variable ${base_command} ${options} + BuiltIn.Log ${full_command} + [Return] ${full_command}