[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