ExpirationTest.sh revision 2362
0N/A#
2362N/A# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
0N/A# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A#
0N/A# This code is free software; you can redistribute it and/or modify it
0N/A# under the terms of the GNU General Public License version 2 only, as
0N/A# published by the Free Software Foundation.
0N/A#
0N/A# This code is distributed in the hope that it will be useful, but WITHOUT
0N/A# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A# version 2 for more details (a copy is included in the LICENSE file that
0N/A# accompanied this code).
0N/A#
0N/A# You should have received a copy of the GNU General Public License version
0N/A# 2 along with this work; if not, write to the Free Software Foundation,
0N/A# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A#
2362N/A# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A# or visit www.oracle.com if you need additional information or have any
2362N/A# questions.
0N/A#
0N/A# @test
0N/A# @bug 4212439 5102289 6272156
0N/A# @summary Tests for expiration control and reloading expired resource bundles.
0N/A# @build ExpirationTest
0N/A# @run shell/timeout=300 ExpirationTest.sh
0N/A
0N/A#
0N/A# Timings of the test sequence
0N/A#
0N/A# 0 5 7 10 20 40 [seconds]
0N/A# +---------+----+------+------//------+------//------+--
0N/A# g X g X U g [event]
0N/A#
0N/A# 0 g - java starts; the first getBundle call gets "German";
0N/A# sleep for 7 sec
0N/A# 5 X - the bundle expires (every 5 seconds)
0N/A# 7 g - java wakes up; the second getBundle call still gets "German";
0N/A# sleep for 33 sec
0N/A# 10 X - the bundle expires in the cache
0N/A# 20 U - shell script updates DE and add AT
0N/A# 40 g - java wakes up; third getBundle call; gets "Deutsch"
0N/A#
0N/A# event: g - getBundle, X - eXpire, U - Update
0N/A#
0N/A#
0N/A# ExpirationTest.java uses 3 exit values.
0N/A# 0 - passed
0N/A# 1 - failed
0N/A# 2 - can't proceed due to slow platform
0N/A#
0N/A
0N/A# Check environment variables
0N/Aif [ "x$TESTJAVA" = "x" ]; then
0N/A 1>&2 echo "No TESTJAVA defined. exiting..."
0N/A exit 1
0N/Afi
0N/A
0N/A# Make sure that this test is run in C locale
0N/ALANG=C
0N/Aexport LANG
0N/ALC_ALL=
0N/Aexport LC_ALL
0N/A
0N/A: ${TESTCLASSES:=.}
0N/A
0N/A# YES if the platform has %s support in date
0N/AHAS_S=NO
0N/A
0N/Acase "`uname`" in
2077N/AWindows* | CYGWIN* )
0N/A DEL=";"
0N/A ;;
0N/ASunOS)
0N/A DEL=":"
0N/A ;;
0N/ALinux)
0N/A DEL=":"
0N/A HAS_S=YES
0N/A ;;
0N/Aesac
0N/A
0N/A# Interval until resources are updated
0N/AINTERVAL=20
0N/A
0N/ADATA=ExpirationData
0N/A
0N/AROOT=${DATA}.properties
0N/AJA=${DATA}_ja.properties
0N/ADE=${DATA}_de.properties
0N/AAT=${DATA}_de_AT.properties
0N/A
0N/AJARFILE=data.jar
0N/A
0N/AcreateProperties() {
0N/A rm -f ${DATA}*.properties
0N/A echo "data: English" > $ROOT
0N/A (echo "data: Japanese"; echo "january: 1gatsu") > $JA
0N/A (echo "data: German"; echo "january: Januar") > $DE
0N/A echo "Properties files have been created at `date +%T`"
0N/A}
0N/A
0N/AcreateJar() {
0N/A if [ "$FORMAT" = "properties" ]; then
0N/A createProperties
0N/A F="${DATA}*.properties"
0N/A else
0N/A createClasses
0N/A F="-C classes ${ROOT}.class -C classes ${JA}.class -C classes ${DE}.class"
0N/A fi
0N/A ${TESTJAVA}/bin/jar cf $JARFILE $F
0N/A ${TESTJAVA}/bin/jar tvf $JARFILE
0N/A rm -f ${DATA}*.properties
0N/A echo "Jar created at `date +%T`"
0N/A}
0N/A
0N/AcreateClasses() {
0N/A rm -f ${DATA}*.java
0N/A rm -rf classes
0N/A mkdir classes
0N/A createJava $ROOT English
0N/A createJava $JA Japanese
0N/A createJava $DE German Januar
0N/A ${TESTJAVA}/bin/javac -d classes ${ROOT}.java ${JA}.java ${DE}.java
0N/A echo "Created" classes/*.class "at `date +%T`"
0N/A}
0N/A
0N/AcreateJava() {
0N/A (echo "
0N/Aimport java.util.*;
0N/A
0N/Apublic class $1 extends ListResourceBundle {
0N/A public Object[][] getContents() {
0N/A return new Object[][] {
0N/A { \"data\", \"$2\" },"
0N/A if [ "x$3" != "x" ]; then
0N/A echo " { \"january\", \"$3\" },"
0N/A fi
0N/Aecho " };
0N/A }
0N/A}") >$1.java
0N/A}
0N/A
0N/AupdateDEaddAT() {
0N/A rm -f $DE
0N/A (echo "data=Deutsch"; echo "january=Januar") > $DE
0N/A # add de_AT
0N/A echo "january=J\u00e4nner" > $AT
0N/A echo "Updated '"${DE}"' and added '"${AT}"' at `date +%T`"
0N/A}
0N/A
0N/AupdateClassDEaddClassAT() {
0N/A rm -f $DE.java classes/$DE.class
0N/A createJava $DE Deutsch Januar
0N/A ${TESTJAVA}/bin/javac -d classes ${DE}.java
0N/A createJava $AT Deutsch "J\\u00e4nner"
0N/A ${TESTJAVA}/bin/javac -d classes ${AT}.java
0N/A echo "Updated '"${DE}"' class and added '"${AT}"' class at `date +%T`"
0N/A}
0N/A
0N/AupdateJar() {
0N/A if [ "$FORMAT" = "properties" ]; then
0N/A updateDEaddAT
0N/A F="$DE $AT"
0N/A else
0N/A updateClassDEaddClassAT
0N/A F="-C classes ${DE}.class -C classes ${AT}.class"
0N/A fi
0N/A ${TESTJAVA}/bin/jar uf $JARFILE $F
0N/A rm -f $DE $AT
0N/A echo "Updated '"${JARFILE}"' at `date +%T`"
0N/A ${TESTJAVA}/bin/jar tvf $JARFILE
0N/A}
0N/A
0N/AgetSeconds() {
0N/A if [ "$HAS_S" = "YES" ]; then
0N/A date '+%s'
0N/A else
0N/A # Returns an approximation of the offset from the Epoch in
0N/A # seconds.
0N/A date -u '+%Y %j %H %M %S' | \
0N/A awk '{d=($1-1970)*365.2425; print int(((((((d+$2-1)*24)+$3)*60)+$3)*60)+$5);}'
0N/A fi
0N/A}
0N/A
0N/A#
0N/A# Execute $1 and check how long it takes
0N/A#
0N/AtimedExec() {
0N/A S=`getSeconds`
0N/A eval $1
0N/A E=`getSeconds`
0N/A D=`expr $E - $S`
0N/A #
0N/A # If this machine is too slow, give up the further testing.
0N/A #
0N/A if [ "$D" -gt $2 ]; then
0N/A 1>&2 echo "This machine took $D seconds to prepare test data," \
0N/A "which is too slow to proceed. Exiting..."
0N/A exit 0
0N/A fi
0N/A unset S
0N/A unset E
0N/A unset D
0N/A}
0N/A
0N/AcheckStatus() {
0N/A if [ $1 = 0 ]; then
0N/A echo "$2: PASSED"
0N/A elif [ $1 != 2 ]; then
0N/A echo "$2: FAILED"
0N/A exit 1
0N/A else
0N/A # Just we should't proceed to avoid timing issues.
0N/A exit 0
0N/A fi
0N/A}
0N/A
0N/A#
0N/A# Before starting tests, check the latency with Thread.sleep().
0N/A#
0N/A${TESTJAVA}/bin/java -cp "${TESTCLASSES}${DEL}." ExpirationTest -latency
0N/ASTATUS=$?
0N/Aif [ $STATUS = 2 ]; then
0N/A exit 0
0N/Afi
0N/A
0N/A#
0N/A# Tests for properties
0N/A#
0N/AFORMAT=properties
0N/A
0N/A#
0N/A# Test with plain files (properties)
0N/A#
0N/Aecho "Starting test with properties files at `date +%T`"
0N/A
0N/A#
0N/A# Creates properties files
0N/A#
0N/AtimedExec createProperties 10
0N/A
0N/A#
0N/A# Execute a child process which will update files in $INTERVAL seconds.
0N/A#
0N/A(sleep $INTERVAL; updateDEaddAT; exit 0) &
0N/A
0N/A${TESTJAVA}/bin/java -cp "${TESTCLASSES}${DEL}." ExpirationTest properties file
0N/ASTATUS=$?
0N/Await
0N/AcheckStatus $STATUS "Test with properties files"
0N/A
0N/A#
0N/A# Test with jar file if jar is available (properties)
0N/A#
0N/Aif [ -x ${TESTJAVA}/bin/jar ] || [ -x ${TESTJAVA}/bin/jar.exe ]; then
0N/A HASJAR=YES
0N/Aelse
0N/A HASJAR=NO
0N/Afi
0N/A
0N/Aif [ $HASJAR = YES ]; then
0N/A echo ""
0N/A echo "Starting test with a jar file (properties) at `date +%T`"
0N/A
0N/A #
0N/A # Create a jar files with properties
0N/A #
0N/A timedExec createJar 10
0N/A
0N/A (sleep $INTERVAL; updateJar; exit 0) &
0N/A ${TESTJAVA}/bin/java -cp "${TESTCLASSES}${DEL}${JARFILE}" ExpirationTest properties jar
0N/A STATUS=$?
0N/A wait
0N/A checkStatus $STATUS "Test with a jar file (properties)"
0N/Afi
0N/A
0N/A#
0N/A# Test for classes
0N/A#
0N/A
0N/A# Note: class-based resource bundles can't be reloaded due to the
0N/A# cache support in class loaders. So the results of the test cases
0N/A# below are not checked. (Test cases always pass.)
0N/A
0N/A# If there's no javac available, then give up the test with
0N/A# class-based properties.
0N/Aif [ ! -x ${TESTJAVA}/bin/javac ] && [ ! -x ${TESTJAVA}/bin/javac.exe ]; then
0N/A exit 0
0N/Afi
0N/A
0N/Arm -f ${DATA}*.properties $JARFILE
0N/A
0N/AFORMAT=class
0N/AROOT=`basename $ROOT .properties`
0N/AJA=`basename $JA .properties`
0N/ADE=`basename $DE .properties`
0N/AAT=`basename $AT .properties`
0N/A
0N/Aecho ""
0N/Aecho "Starting test with class files at `date +%T`"
0N/A
0N/A#
0N/A# Create class files
0N/A#
0N/AtimedExec createClasses 10
0N/A
0N/A(sleep $INTERVAL; updateClassDEaddClassAT; exit 0) &
0N/A${TESTJAVA}/bin/java -cp "${TESTCLASSES}${DEL}classes" ExpirationTest class file
0N/ASTATUS=$?
0N/Await
0N/AcheckStatus $STATUS "Test with class files"
0N/A
0N/Aif [ $HASJAR = YES ]; then
0N/A echo ""
0N/A echo "Starting test with a jar file (class) at `date +%T`"
0N/A
0N/A #
0N/A # Create a jar file with class files
0N/A #
0N/A timedExec createJar 10
0N/A
0N/A (sleep $INTERVAL; updateJar; exit 0) &
0N/A ${TESTJAVA}/bin/java -cp "${TESTCLASSES}${DEL}${JARFILE}" ExpirationTest class jar
0N/A STATUS=$?
0N/A wait
0N/A checkStatus $STATUS "Test with a jar file (class)"
0N/Afi
0N/A
0N/Aexit 0