LISP: Fix plots to show all graphs
[integration/test.git] / csit / libraries / NexusKeywords.robot
index 850711e5d0c9066e2a05298459b1da230320fd58..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}
@@ -103,19 +108,53 @@ Deploy_Test_Tool
     ${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.
-    ...    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
+    ...    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}
+    ${base_command}=    Compose_Base_Java_Command    openjdk=${openjdk}
+    ${full_command}=    BuiltIn.Set_Variable    ${base_command} ${options}
     BuiltIn.Log    ${full_command}
     [Return]    ${full_command}