diff -r 4cdbb7f9480f -r e3707dde9509 jdk/test/java/util/ResourceBundle/Control/ExpirationTest.java --- a/jdk/test/java/util/ResourceBundle/Control/ExpirationTest.java Thu Dec 01 16:14:41 2011 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -/* - * - */ - -/* - * This class is used by ExpirationTest.sh. See the timing information in - * the shell script. - */ - -import java.util.*; - -public class ExpirationTest { - static final Locale AUSTRIA = new Locale("de", "AT"); - static String format; - static String fileType; - - public static void main(String[] args) { - // If -latency is specified, try sleeping for 3 seconds 3 - // times to see its latency. If the latency is too large, then - // the program exits with 2. (See sleep()) - if ("-latency".equals(args[0])) { - System.out.print("Checking latency... "); - for (int i = 0; i < 3; i++) { - sleep(3); - } - System.out.println("done"); - System.exit(0); - } - - format = args[0]; - fileType = args[1]; - - Locale loc = Locale.getDefault(); - try { - Locale.setDefault(Locale.JAPAN); - ResourceBundle.Control control = new TestControl(); - ResourceBundle rb = ResourceBundle.getBundle("ExpirationData", Locale.GERMAN, - control); - check(rb.getString("data"), "German"); - - rb = ResourceBundle.getBundle("ExpirationData", AUSTRIA, control); - check(rb.getString("january"), "Januar"); - - // Wait until the instance gets expired in the cache in 7 seconds. - sleep(7); - - // At this point, it should be determined that reloading is not needed. - rb = ResourceBundle.getBundle("ExpirationData", Locale.GERMAN, control); - check(rb.getString("data"), "German"); - - rb = ResourceBundle.getBundle("ExpirationData", AUSTRIA, control); - check(rb.getString("january"), "Januar"); - - // Wait until the instance in the cache gets expired again and - // ExpirationData_de gets updated. - // 33 = 40 - 7 (See the timing chart in ExpirationTest.sh) - sleep(33); - - // At this point, getBundle must reload the updated - // ExpirationData_de and ExpirationData_de_AT must be - // avaible. - - rb = ResourceBundle.getBundle("ExpirationData", Locale.GERMAN, control); - try { - check(rb.getString("data"), "Deutsch"); - } catch (RuntimeException e) { - if (format.equals("class")) { - // Class loader doesn't load updated classes. - System.out.println("Known class limitation: " + e.getMessage()); - } - } - - rb = ResourceBundle.getBundle("ExpirationData", AUSTRIA, control); - try { - check(rb.getString("january"), "J\u00e4nner"); - } catch (RuntimeException e) { - if (fileType.equals("jar")) { - // Jar doesn't load new entries. - System.out.println("Known jar limitation: " + e.getMessage()); - } else { - throw e; - } - } - } finally { - Locale.setDefault(loc); - } - } - - private static void check(String s, String expected) { - String time = getTime(); - if (!s.equals(expected)) { - throw new RuntimeException("got '" + s + "', expected '" + expected + "' at " - + time); - } - System.out.println("ExpirationTest: got '" + s + "' at " + time); - } - - private static void sleep(int seconds) { - long millis = seconds * 1000; - long start = System.currentTimeMillis(); - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - } - long end = System.currentTimeMillis(); - long latency = end - start - millis; - // If the latecy is more than 1% of the requested sleep time, - // then give up the testing. - if (latency > millis/100) { - System.err.printf("Latency is too large: slept for %d [ms], " - + "expected %d [ms] latency rate: %+.2f%% (expected not more than 1%%)%n" - + "exiting...%n", - end - start, millis, (double)latency*100.0/millis); - System.exit(2); - } - } - - private static final String getTime() { - return new Date().toString().substring(11, 19); - } - - private static class TestControl extends ResourceBundle.Control { - @Override - public long getTimeToLive(String name, Locale loc) { - return 5000; // 5 seconds - } - - @Override - public ResourceBundle newBundle(String name, Locale loc, - String fmt, ClassLoader cl, boolean reload) - throws IllegalAccessException, InstantiationException, java.io.IOException { - ResourceBundle bundle = super.newBundle(name, loc, fmt, cl, reload); - if (bundle != null) { - System.out.println("newBundle: " + (reload ? "**re" : "") - + "loaded '" + toName(name, loc , fmt) + "' at " + getTime()); - } - return bundle; - } - - @Override - public boolean needsReload(String name, Locale loc, - String fmt, ClassLoader cl, - ResourceBundle rb, long time) { - boolean b = super.needsReload(name, loc, fmt, cl, rb, time); - System.out.println("needsReload: '" + b + "' for " + toName(name, loc, fmt) - + " at " + getTime()); - return b; - } - - private String toName(String name, Locale loc, String fmt) { - return toResourceName(toBundleName(name, loc), fmt.substring(5)); - } - } -}