Connectivity Tests for the Openstack Jobs
[integration/test.git] / csit / libraries / NexusKeywords.robot
index f93f707f406a42d62742d460abe2b0991ea1f6b6..319872ff4616a594cd63af45c888e2d89bdf4faa 100644 (file)
@@ -17,6 +17,11 @@ Library           String
 Resource          SSHKeywords.robot
 
 *** Variables ***
+${JDKVERSION}     None
+${JAVA_7_HOME_CENTOS}    /usr/lib/jvm/java-1.7.0
+${JAVA_7_HOME_UBUNTU}    /usr/lib/jvm/java-7-openjdk-amd64
+${JAVA_8_HOME_CENTOS}    /usr/lib/jvm/java-1.8.0
+${JAVA_8_HOME_UBUNTU}    /usr/lib/jvm/java-8-openjdk-amd64
 ${NEXUS_FALLBACK_URL}    ${NEXUSURL_PREFIX}/content/repositories/opendaylight.snapshot
 
 *** Keywords ***
@@ -76,7 +81,7 @@ Deploy_Artifact
     ${version}    ${location}=    NexusKeywords__Detect_Version_To_Pull    ${component}
     # TODO: Use RequestsLibrary and String instead of curl and bash utilities?
     ${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
+    ${namepart}=    SSHLibrary.Execute_Command    curl -L ${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}
     ${namepart}=    BuiltIn.Set_Variable_If    ${length} == 0    ${version}    ${namepart}
@@ -102,3 +107,54 @@ Deploy_Test_Tool
     ${name_suffix}=    BuiltIn.Set_Variable    -${suffix}.jar
     ${filename}=    Deploy_Artifact    ${component}    ${artifact}    ${name_prefix}    ${name_suffix}
     [Return]    ${filename}
+
+Compose_Dilemma_Filepath
+    [Arguments]    ${default_path}    ${specific_path}
+    [Documentation]    Query active SSH connection, return specific path if it exists else default path.
+    ${out}    ${rc}=    SSHLibrary.Execute_Command    ls -lA ${specific_path} 2>&1    return_rc=True
+    BuiltIn.Return_From_Keyword_If    ${rc} == 0    ${specific_path}
+    BuiltIn.Return_From_Keyword    ${default_path}
+
+Compose_Base_Java_Command
+    [Arguments]    ${openjdk}=${JDKVERSION}
+    [Documentation]    Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed.
+    ...    This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
+    ...    Commands composed for one SSH connection shall not be reused on other SSH connections as the two connections may have different Java setups.
+    ...    Not directly related to Nexus, but versioned Java tools may need this.
+    # Check whether the user set the override and return it if yes.
+    BuiltIn.Run_Keyword_And_Return_If    """${openjdk}""" == "openjdk8"    Compose_Dilemma_Filepath    ${JAVA_8_HOME_CENTOS}/bin/java    ${JAVA_8_HOME_UBUNTU}/bin/java
+    BuiltIn.Run_Keyword_And_Return_If    """${openjdk}""" == "openjdk7"    Compose_Dilemma_Filepath    ${JAVA_7_HOME_CENTOS}/bin/java    ${JAVA_7_HOME_UBUNTU}/bin/java
+    # Attempt to call plain "java" command directly. If it works, return it.
+    ${out}    ${rc}=    SSHLibrary.Execute_Command    java -version 2>&1    return_rc=True
+    BuiltIn.Return_From_Keyword_If    ${rc} == 0    java
+    # Query the virtual machine for the JAVA_HOME environment variable and
+    # use it to assemble a (hopefully) working command. If that worked out,
+    # return the result.
+    ${java}=    SSHLibrary.Execute_Command    echo \$JAVA_HOME/bin/java 2>&1
+    ${out}    ${rc}=    SSHLibrary.Execute_Command    ${java} -version 2>&1    return_rc=True
+    BuiltIn.Return_From_Keyword_If    ${rc} == 0    ${java}
+    # There are bizzare test environment setups where the (correct) JAVA_HOME
+    # is set in the VM where Robot is running but not in the VM where the
+    # tools are supposed to run (usually because these two are really one
+    # and the same system and idiosyncracies of BASH prevent easy injection
+    # of the JAVA_HOME environment variable into a place where connections
+    # made by SSHLibrary would pick it up). So try to use that value to
+    # create a java command and check that it works.
+    ${JAVA_HOME}=    OperatingSystem.Get_Environment_Variable    JAVA_HOME    ${EMPTY}
+    ${java}=    BuiltIn.Set_Variable_If    """${JAVA_HOME}"""!=""    ${JAVA_HOME}/bin/java    false
+    ${out}    ${rc}=    SSHLibrary.Execute_Command    ${java} -version 2>&1    return_rc=True
+    BuiltIn.Return_From_Keyword_If    ${rc} == 0    ${java}
+    # Nothing works, most likely java is not installed at all on the target
+    # machine or it is hopelesly lost. Bail out with a helpful message
+    # telling the user how to make it accessible for the script.
+    BuiltIn.Fail    Unable to find Java; specify \${JDKVERSION}, put it to your PATH or set JAVA_HOME environment variable.
+
+Compose_Full_Java_Command
+    [Arguments]    ${options}    ${openjdk}=${JDKVERSION}
+    [Documentation]    Return full Bash command to run Java with given options.
+    ...    This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
+    ...    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}