Add ability to use JAVA_HOME to find java 78/37278/6
authorJozef Behran <jbehran@cisco.com>
Thu, 7 Apr 2016 11:22:59 +0000 (13:22 +0200)
committerJozef Behran <jbehran@cisco.com>
Thu, 7 Apr 2016 18:00:48 +0000 (20:00 +0200)
If no JDK_VERSION is specified and invoking "java" on the
commandline does not work at all ("java: command not found"),
the code uses the value of the JAVA_HOME as the root of the
JDK to be used as a last resort.

Change-Id: Ieb647003dc7fe4790b747191371ae240fec40d1b
Signed-off-by: Jozef Behran <jbehran@cisco.com>
csit/libraries/NexusKeywords.robot

index 5a6ed2c43ab0f0f555a7bde96edb4574cc824d8c..319872ff4616a594cd63af45c888e2d89bdf4faa 100644 (file)
@@ -17,6 +17,7 @@ Library           String
 Resource          SSHKeywords.robot
 
 *** Variables ***
 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_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
@@ -120,9 +121,33 @@ Compose_Base_Java_Command
     ...    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.
     ...    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
     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
-    BuiltIn.Return_From_Keyword    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}
 
 Compose_Full_Java_Command
     [Arguments]    ${options}    ${openjdk}=${JDKVERSION}