[arch-commits] Commit in java-common/trunk (3 files)

Guillaume Alaux guillaume at archlinux.org
Thu Jul 31 11:42:34 UTC 2014


    Date: Thursday, July 31, 2014 @ 13:42:34
  Author: guillaume
Revision: 218445

Revamp script 'archlinux-java'

Modified:
  java-common/trunk/PKGBUILD
  java-common/trunk/bin_archlinux-java
  java-common/trunk/test_archlinux-java

---------------------+
 PKGBUILD            |    6 -
 bin_archlinux-java  |   90 +++++++++++---------
 test_archlinux-java |  216 ++++++++++++++++++++++++++------------------------
 3 files changed, 170 insertions(+), 142 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2014-07-31 11:20:42 UTC (rev 218444)
+++ PKGBUILD	2014-07-31 11:42:34 UTC (rev 218445)
@@ -1,7 +1,7 @@
 # Maintainer: Guillaume ALAUX <guillaume at archlinux.org>
 pkgname=java-common
 pkgver=1
-pkgrel=1
+pkgrel=2
 pkgdesc='Common files for Java Environments'
 arch=('any')
 url='www.archlinux.org'
@@ -21,8 +21,8 @@
 
 sha256sums=('9f0032e47705ce55a615ab3b942720b8447f490d1ff430b214038b81c3019ac2'
             '8dbafa311f34d23c5bbef71fa942b97b224ebeb330b36195f22a1836285bbb83'
-            'd54f54e79ee8104783a12fa7e55f9826f80c26142b1d89a34ffe2529ed78d962'
-            '90c1ca2f32aedf684048e1c072e03eff6b919a10b9b0e83b182186e7572d11c6'
+            'bf614a14c769c28923866e5d0b0b5836ea2111f39a60f74f5b7ac325157a6c1a'
+            '718c5fc1b7182da6b85b2e5e302c0e418fd2f4a93731c24b8fbd0ee338ae81b3'
             '622927af9ec374140a878993936f7fdd4206fe069dddfcefc6d4e15fa6d67f39'
             '65a313a76fd5cc1c58c9e19fbc80fc0e418a4cbfbd46d54b35ed5b6e0025d4ee')
 

Modified: bin_archlinux-java
===================================================================
--- bin_archlinux-java	2014-07-31 11:20:42 UTC (rev 218444)
+++ bin_archlinux-java	2014-07-31 11:42:34 UTC (rev 218445)
@@ -58,6 +58,7 @@
 }
 
 set_bin_links() {
+  # TODO this 'unlink' part should be in its own function
   find -L ${BIN_PATH} -samefile ${WRAPPER_PATH} \
     | while read lpath; do
       if [ ! -x "${DEFAULT_PATH}/bin/$(basename ${lpath})" ]; then
@@ -72,19 +73,24 @@
 }
 
 # $1: Java environment name to set as default
-set_default_to() {
-  check_root
+set_default_link_to() {
+  # FIXME if we do not "unlink", then test_force_set_default_with_default fails
+  unlink ${DEFAULT_PATH} 2>/dev/null
   ln -sf $1 ${DEFAULT_PATH}
+}
+
+# $1: Java environment name to set as default
+set_java_to() {
+  set_default_link_to $1
   set_bin_links
-  parent_dir=$(dirname $1)
-  if is_java_valid ${parent_dir}; then
-    echo "Warning: '${parent_dir}' looks like a valid JDK whereas you are only setting '$1' as default"
-    echo "Fix this with 'archlinux-java --force-set ${parent_dir}'"
-  fi
+#  parent_dir=$(dirname $1)
+#  if is_java_valid ${parent_dir}; then
+#    echo "Warning: '${parent_dir}' looks like a valid JDK whereas you are only setting '$1' as default"
+#    echo "Fix this with 'archlinux-java --force-set ${parent_dir}'"
+#  fi
 }
 
-unset_default() {
-  check_root
+unset_java() {
   find ${DEFAULT_PATH}/bin ! -type d -perm /a=x \
     | while read bpath; do
       unlink ${BIN_PATH}/$(basename ${bpath}) 2>/dev/null
@@ -116,36 +122,42 @@
 
 # $1: Java environment name to try to set
 try_set_default() {
-  default_java=$(get_default_java)
-  if ! is_java_valid ${default_java} || [ "x${default_java}" = "x$1/jre" ]; then
-    force_set_default $1
-  else
-    echo "The default Java environment is already set to ${default_java}"
-    echo "Please use 'archlinux-java --force-set $1' if you want to force it"
+  if is_java_valid $1; then
+    default_java=$(get_default_java)
+    if [ "${default_java}" = "$1/jre" ] \
+      || ( [ "x${default_java}" != "x" ] && ! is_java_valid ${default_java} ); then
+      unset_java
+    fi
+    if [ "x$(get_default_java)" = "x" ]; then
+      set_default_link_to $1
+    fi
+    set_bin_links
   fi
+  if [ "x$(get_default_java)" != "x$1" ]; then
+    exit 1
+  fi
 }
 
 # $1: Java environment name to set as default
 force_set_default() {
-  check_root
-  if is_java_valid $1; then
-    if [ "x$(get_default_java ${DEFAULT_PATH})" != "x" ]; then
-      unset_default
-    fi
-    set_default_to $1
-  else
+  if ! is_java_valid $1; then
     echo "'${JVM_DIR}/$1' is not a valid Java environment path"
-    exit 3
+    exit 1
   fi
+  default=$(get_default_java)
+  if [ "x$1" != "x${default}" ] || ! is_java_valid ${default}; then
+    set_default_link_to $1
+  fi
+  set_bin_links
 }
 
 # $1: Java environment name to try to unset
 try_unset_default() {
-  default=$(get_default_java)
-  if [ "x${default}" != "x" -a "x${default}" = "x$1" ]; then
-    unset_default
-  else
-    echo "'$1' is not set as default Java environment"
+  # This function should be used by pacman '.install' scripts. Its goal is:
+  #   "if the current Java env is set to $1, then remove it"
+  # So no need to report a failure if current Java is not equal to the one passed as param
+  if [ "x$1" != "x" -a "x$(get_default_java)" = "x$1" ]; then
+    unset_java
   fi
 }
 
@@ -153,17 +165,17 @@
   default=$(get_default_java)
   if is_java_valid ${default}; then
     if is_java_valid $(dirname ${default}); then
-      unset_default
-      set_default_to $(dirname ${default})
+      unset_java
+      set_java_to $(dirname ${default})
     fi
   else
     if [ "x${default}" != "x" ]; then
-      unset_default
+      unset_java
     fi
     to_check=('java-7-openjdk' 'java-7-openjdk/jre' $(get_installed_javas))
     for java in ${to_check[@]}; do
       if ! is_java_valid $(get_default_java) && is_java_valid ${java}; then
-        set_default_to ${java}
+        set_java_to ${java}
       fi
     done
   fi
@@ -178,18 +190,18 @@
   echo "$(basename $0) [ --status | --try-set <JAVA_ENV> | --force-set <JAVA_ENV> | --try-unset <JAVA_ENV> | --fix ]"
   echo -e "\n\t<JAVA_ENV> must be the name of a Java environment directory available in ${JVM_DIR}\n"
   echo -e '\t--status\t\tList installed Java environments and enabled one'
-  echo -e '\t--try-set <JAVA_ENV>\tIf no Java environments is already set as default, set this one'
+  echo -e '\t--try-set <JAVA_ENV>\tIf no valid Java environments is already set as default, then set this one'
   echo -e '\t--force-set <JAVA_ENV>\tForce <JAVA_ENV> as default'
-  echo -e '\t--try-unset <JAVA_ENV>\tIf <JAVA_ENV> is set as default, unset it'
-  echo -e '\t--fix\t\t\tFix an invalid default Java environment'
+  echo -e '\t--try-unset <JAVA_ENV>\tIf <JAVA_ENV> is set as default, then unset it'
+  echo -e '\t--fix\t\t\tFix an invalid default Java environment configuration'
 }
 
 ## Main
 case $1 in
   '--status')    give_status;;
-  '--try-set')   check_param_count $# 2; try_set_default $2;;
-  '--force-set') check_param_count $# 2; force_set_default $2;;
-  '--try-unset') check_param_count $# 2; try_unset_default $2;;
-  '--fix')       fix_default;;
+  '--try-set')   check_root; check_param_count $# 2; try_set_default $2;;
+  '--force-set') check_root; check_param_count $# 2; force_set_default $2;;
+  '--try-unset') check_root; check_param_count $# 2; try_unset_default $2;;
+  '--fix')       check_root; fix_default;;
   *)             usage;;
 esac

Modified: test_archlinux-java
===================================================================
--- test_archlinux-java	2014-07-31 11:20:42 UTC (rev 218444)
+++ test_archlinux-java	2014-07-31 11:42:34 UTC (rev 218445)
@@ -45,23 +45,31 @@
 # $1: path of Java environment to create
 create_valid_jre_env() {
   mkdir -p ${JVM_DIR}/$1/bin
-  touch    ${JVM_DIR}/$1/bin/java
-  chmod +x ${JVM_DIR}/$1/bin/java
+  for binary in java keytool orbd; do
+    touch    ${JVM_DIR}/$1/bin/${binary}
+    chmod +x ${JVM_DIR}/$1/bin/${binary}
+  done
 }
 
 # $1: path of Java environment to create
 create_valid_jdk_env() {
   create_valid_jre_env "$1"
-  touch    ${JVM_DIR}/$1/bin/javac
-  chmod +x ${JVM_DIR}/$1/bin/javac
+  for binary in javac javah jhat; do
+    touch    ${JVM_DIR}/$1/bin/${binary}
+    chmod +x ${JVM_DIR}/$1/bin/${binary}
+  done
   create_valid_jre_env "$1/jre"
 }
 
 set_default_for_test() {
   ln -s $1 ${DEFAULT_PATH}
-  ln -s ${WRAPPER_PATH} ${BIN_PATH}/java
-  if [ -x ${DEFAULT_PATH}/bin/javac ]; then
-    ln -s ${WRAPPER_PATH} ${BIN_PATH}/javac
+  for binary in java keytool orbd; do
+    ln -s ${WRAPPER_PATH} ${BIN_PATH}/${binary}
+  done
+  if [ -d ${DEFAULT_PATH}/jre ]; then
+    for binary in javac javah jhat; do
+      ln -s ${WRAPPER_PATH} ${BIN_PATH}/${binary}
+    done
   fi
 }
 
@@ -72,79 +80,24 @@
 }
 
 assertDefaultSetTo() {
-  assertEquals "Default is not set to $1" "$1" "$(readlink ${DEFAULT_PATH})"
-  assertEquals "PATH has no java binary" "${WRAPPER_PATH}" "$(readlink ${BIN_PATH}/java)"
-  if [ -d ${DEFAULT_PATH}/jre ]; then
-    assertEquals "PATH has no javac binary" "${WRAPPER_PATH}" "$(readlink ${BIN_PATH}/javac)"
-  fi
+  new_java=$1
+  assertEquals "Default points at wrong Java env" "${new_java}" "$(readlink ${DEFAULT_PATH})"
+  # For all links in /usr/bin that point at the wrapper
+  for lpath in $(find -L ${BIN_PATH} -samefile ${WRAPPER_PATH}); do
+    # There is a binary in the JVM bin dir
+    assertTrue 'Wrong /usr/bin link' "test -x ${JVM_DIR}/${new_java}/bin/$(basename ${lpath})"
+  done
+  # For all executable binaries provided by the Java env
+  for binary in $(find ${JVM_DIR}/${new_java}/bin -type f -perm /a=x); do
+    # There is a link in /usr/bin
+    bin_link=${BIN_PATH}/$(basename ${binary})
+    assertEquals 'No link in /usr/bin' "${WRAPPER_PATH}" "$(readlink ${bin_link})"
+  done
 }
 
 
-test_valid_java_env_valid() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  assertTrue 'Does not detect valid Java env' "is_java_valid ${JAVA_NAME}/jre"
-}
+# give_status
 
-test_valid_java_env_not_valid() {
-  create_valid_jre_env "non_existing"
-  assertFalse 'Does not detect invalid Java env' "is_java_valid ${JAVA_NAME}/jre"
-}
-
-test_get_default_java() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  set_default_for_test "${JAVA_NAME}/jre"
-  assertEquals 'Wrong default Java found' "${JAVA_NAME}/jre" "$(get_default_java)"
-}
-
-test_get_default_java_no_default() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  assertNull 'Wrong default Java found' "$(get_default_java)"
-}
-
-test_get_installed_javas() {
-  JAVA_NAME_FIRST_ALPHA="a$(get_rand_str)"
-  JAVA_NAME_SECON_ALPHA="b$(get_rand_str)"
-  JAVA_NAME_THIRD_ALPHA="c$(get_rand_str)"
-  create_valid_jre_env "${JAVA_NAME_FIRST_ALPHA}/jre"
-  create_valid_jre_env "${JAVA_NAME_SECON_ALPHA}/jre"
-  create_valid_jdk_env "${JAVA_NAME_THIRD_ALPHA}"
-  list=($(get_installed_javas | sort))
-  expected=("${JAVA_NAME_FIRST_ALPHA}/jre" "${JAVA_NAME_SECON_ALPHA}/jre" "${JAVA_NAME_THIRD_ALPHA}")
-  assertTrue "Did not find installed Java environments" "[ '${expected[*]}' == '${list[*]}' ]"
-}
-
-test_get_installed_javas_no_env() {
-  list=($(get_installed_javas))
-  expected=()
-  assertEquals "List of installed Java envs is not 0" 0 "${#list[@]}"
-}
-
-test_set_default_to() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  set_default_to "${JAVA_NAME}/jre"
-  assertEquals 'Success does not yield 0' 0 $?
-  assertDefaultSetTo "${JAVA_NAME}/jre"
-}
-
-test_set_default_to_jre_but_jdk() {
-  create_valid_jdk_env "${JAVA_NAME}"
-  output=$(set_default_to "${JAVA_NAME}/jre")
-  mess="Warning: '${JAVA_NAME}' looks like a valid JDK"
-  mess+=" whereas you are only setting '${JAVA_NAME}/jre' as default"
-  mess+="\nFix this with 'archlinux-java --force-set ${JAVA_NAME}'"
-  expected=$(echo -e ${mess})
-  assertEquals 'Wrong message' "${expected}" "${output}"
-  assertDefaultSetTo "${JAVA_NAME}/jre"
-}
-
-tests_unset_default() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  set_default_for_test "${JAVA_NAME}/jre"
-  unset_default
-  assertEquals 'Success does not yield 0' 0 $?
-  assertTrue 'Link was not unset' "[ ! -e ${DEFAULT_PATH} ]"
-}
-
 test_give_status() {
   JAVA_NAME_1="a$(get_rand_str)"
   JAVA_NAME_2="b$(get_rand_str)"
@@ -173,66 +126,126 @@
   assertEquals 'Wrong status output' 'No compatible Java environment installed' "${output}"
 }
 
+
+# try_set_default
+
 test_try_set_default_no_default() {
+  create_valid_jdk_env "${JAVA_NAME}"
+  output=$(try_set_default "${JAVA_NAME}")
+  assertEquals 'Wrong status returned' 0 $?
+  assertDefaultSetTo "${JAVA_NAME}"
+}
+
+test_try_set_default_invalid_default_link() {
   create_valid_jre_env "${JAVA_NAME}/jre"
-  try_set_default "${JAVA_NAME}/jre"
+  set_default_for_test "non_existing"
+  output=$(try_set_default "${JAVA_NAME}/jre")
+  assertEquals 'Wrong status returned' 0 $?
   assertDefaultSetTo "${JAVA_NAME}/jre"
 }
 
-test_try_set_default_default_exists() {
+test_try_set_default_invalid_bin_link() {
   create_valid_jre_env "${JAVA_NAME}/jre"
   set_default_for_test "${JAVA_NAME}/jre"
+  unlink "${BIN_PATH}/java"
   output=$(try_set_default "${JAVA_NAME}/jre")
-  mess="The default Java environment is already set to ${JAVA_NAME}/jre"
-  mess+="\nPlease use 'archlinux-java --force-set ${JAVA_NAME}/jre' if you want to force it"
-  expected=$(echo -e "${mess}")
-  assertEquals 'Wrong message' "${expected}" "${output}"
+  assertEquals 'Wrong status returned' 0 $?
   assertDefaultSetTo "${JAVA_NAME}/jre"
 }
 
-test_try_set_default_default_invalid() {
+test_try_set_default_default_already_set() {
   create_valid_jre_env "${JAVA_NAME}/jre"
-  set_default_for_test "non_existing"
-  try_set_default "${JAVA_NAME}/jre"
+  set_default_for_test "${JAVA_NAME}/jre"
+  output=$(try_set_default "${JAVA_NAME}/jre")
+  assertEquals 'Wrong status returned' 0 $?
   assertDefaultSetTo "${JAVA_NAME}/jre"
 }
 
+test_try_set_default_other_java_set() {
+  JAVA_NAME_2="$(get_rand_str)"
+  create_valid_jre_env "${JAVA_NAME}/jre"
+  create_valid_jdk_env "${JAVA_NAME_2}"
+  set_default_for_test "${JAVA_NAME_2}"
+  output=$(try_set_default "${JAVA_NAME}/jre")
+  assertEquals 'Wrong status returned' 1 $?
+  assertDefaultSetTo "${JAVA_NAME_2}"
+}
+
 test_try_set_default_jdk_where_jre_is_default() {
   create_valid_jdk_env "${JAVA_NAME}"
   set_default_for_test "${JAVA_NAME}/jre"
-  try_set_default "${JAVA_NAME}"
+  output=$(try_set_default "${JAVA_NAME}")
+  assertEquals 'Wrong status returned' 0 $?
   assertDefaultSetTo "${JAVA_NAME}"
 }
 
-test_force_set_default_no_default() {
-  create_valid_jre_env "${JAVA_NAME}/jre"
-  force_set_default "${JAVA_NAME}/jre"
-  assertDefaultSetTo "${JAVA_NAME}/jre"
+test_try_set_default_new_is_invalid() {
+  output=$(try_set_default "INVALID")
+  assertEquals 'Wrong status returned' 1 $?
+  assertDefaultNotSet
 }
 
+
+# force_set_default
+
+test_force_set_default_new_invalid() {
+  create_valid_jdk_env "${JAVA_NAME}"
+  set_default_for_test "${JAVA_NAME}"
+  output=$(force_set_default "INVALID")
+  assertEquals 'Wrong status returned' 1 $?
+  assertEquals 'Wrong message' "'${JVM_DIR}/INVALID' is not a valid Java environment path" "${output}"
+  assertDefaultSetTo "${JAVA_NAME}"
+}
+
+test_force_set_default_current_invalid() {
+  create_valid_jdk_env "${JAVA_NAME}"
+  set_default_for_test "INVALID"
+  output=$(force_set_default "${JAVA_NAME}")
+  assertEquals 'Wrong status returned' 0 $?
+  assertDefaultSetTo "${JAVA_NAME}"
+}
+
+test_force_set_default_same_java() {
+  create_valid_jdk_env "${JAVA_NAME}"
+  set_default_for_test "${JAVA_NAME}"
+  unlink ${BIN_PATH}/java
+  output=$(force_set_default "${JAVA_NAME}")
+  assertEquals 'Wrong status returned' 0 $?
+  assertDefaultSetTo "${JAVA_NAME}"
+}
+
 test_force_set_default_with_default() {
   create_valid_jre_env "${JAVA_NAME}/jre"
   set_default_for_test "${JAVA_NAME}/jre"
   JAVA_NAME_2="$(get_rand_str)"
   create_valid_jre_env "${JAVA_NAME_2}/jre"
-  force_set_default "${JAVA_NAME_2}/jre"
+  output=$(force_set_default "${JAVA_NAME_2}/jre")
+  assertEquals 'Wrong status returned' 0 $?
   assertDefaultSetTo "${JAVA_NAME_2}/jre"
 }
 
+test_force_set_default_no_default() {
+  create_valid_jre_env "${JAVA_NAME}/jre"
+  output=$(force_set_default "${JAVA_NAME}/jre")
+  assertEquals 'Wrong status returned' 0 $?
+  assertDefaultSetTo "${JAVA_NAME}/jre"
+}
+
 test_force_set_default_target_invalid() {
   create_valid_jre_env "${JAVA_NAME}/jre"
-  output=$(force_set_default "non_existing")
-  expected="'${JVM_DIR}/non_existing' is not a valid Java environment path"
+  output=$(force_set_default "INVALID")
+  assertEquals 'Wrong status returned' 1 $?
+  expected="'${JVM_DIR}/INVALID' is not a valid Java environment path"
   assertEquals 'Wrong message' "${expected}" "${output}"
   assertDefaultNotSet
 }
 
-#no_default
+
+# try_unset_default
+
 test_try_unset_default_no_default() {
   create_valid_jdk_env "${JAVA_NAME}"
-  output=$(try_unset_default "${JAVA_NAME}")
-  expected="'${JAVA_NAME}' is not set as default Java environment"
-  assertEquals 'Wrong message' "${expected}" "${output}"
+  try_unset_default "${JAVA_NAME}"
   assertDefaultNotSet
 }
 
@@ -239,9 +252,9 @@
 test_try_unset_default_default_not_target() {
   create_valid_jre_env "${JAVA_NAME}/jre"
   set_default_for_test "${JAVA_NAME}/jre"
-  output=$(try_unset_default "other_java")
-  expected="'other_java' is not set as default Java environment"
-  assertEquals 'Wrong message' "${expected}" "${output}"
+  JAVA_NAME_2=$(get_rand_str)
+  create_valid_jdk_env "${JAVA_NAME_2}"
+  try_unset_default "${JAVA_NAME_2}"
   assertDefaultSetTo "${JAVA_NAME}/jre"
 }
 
@@ -252,6 +265,9 @@
   assertDefaultNotSet
 }
 
+
+# fix_default
+
 test_fix_default_default_valid() {
   create_valid_jre_env "${JAVA_NAME}/jre"
   set_default_for_test "${JAVA_NAME}/jre"




More information about the arch-commits mailing list