< prev index next >

test/java/lang/System/LoggerFinder/internal/LoggerFinderLoaderTest/LoggerFinderLoaderTest.java

Print this page




  36 import java.util.HashMap;
  37 import java.util.Map;
  38 import java.util.ResourceBundle;
  39 import java.util.stream.Stream;
  40 import java.util.concurrent.ConcurrentHashMap;
  41 import java.util.concurrent.atomic.AtomicBoolean;
  42 import java.util.concurrent.atomic.AtomicLong;
  43 import java.util.function.Supplier;
  44 import java.lang.System.LoggerFinder;
  45 import java.lang.System.Logger;
  46 import java.lang.System.Logger.Level;
  47 import java.security.AccessController;
  48 import java.security.PrivilegedAction;
  49 import java.util.EnumSet;
  50 import java.util.Iterator;
  51 import java.util.Locale;
  52 import java.util.ServiceConfigurationError;
  53 import java.util.ServiceLoader;
  54 import java.util.concurrent.atomic.AtomicReference;
  55 import jdk.internal.logger.SimpleConsoleLogger;

  56 
  57 /**
  58  * @test
  59  * @bug     8140364
  60  * @summary JDK implementation specific unit test for LoggerFinderLoader.
  61  *          Tests the behavior of LoggerFinderLoader with respect to the
  62  *          value of the internal diagnosability switches. Also test the
  63  *          DefaultLoggerFinder and SimpleConsoleLogger implementation.
  64  * @modules java.base/sun.util.logging
  65  *          java.base/jdk.internal.logger
  66  * @build AccessSystemLogger LoggerFinderLoaderTest CustomSystemClassLoader
  67  * @run  driver AccessSystemLogger
  68  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest NOSECURITY
  69  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest NOPERMISSIONS
  70  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest WITHPERMISSIONS
  71  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest NOSECURITY
  72  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest NOPERMISSIONS
  73  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest WITHPERMISSIONS
  74  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true -Djdk.logger.finder.error=ERROR LoggerFinderLoaderTest NOSECURITY
  75  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true -Djdk.logger.finder.error=ERROR LoggerFinderLoaderTest NOPERMISSIONS


 149                 return name;
 150             }
 151 
 152             @Override
 153             public boolean isLoggable(Logger.Level level) {
 154                 return logger.isLoggable(level);
 155             }
 156 
 157             @Override
 158             public void log(Logger.Level level, ResourceBundle bundle, String key, Throwable thrown) {
 159                 logger.log(level, bundle, key, thrown);
 160             }
 161 
 162             @Override
 163             public void log(Logger.Level level, ResourceBundle bundle, String format, Object... params) {
 164                 logger.log(level, bundle, format, params);
 165             }
 166 
 167         }
 168 
 169         public Logger getLogger(String name, Class<?> caller);
 170         public Logger getLocalizedLogger(String name, ResourceBundle bundle, Class<?> caller);
 171     }
 172 
 173     public static class BaseLoggerFinder extends LoggerFinder implements TestLoggerFinder {
 174 
 175         static final RuntimePermission LOGGERFINDER_PERMISSION =
 176                     new RuntimePermission("loggerFinder");
 177         public BaseLoggerFinder() {
 178             if (fails.get()) {
 179                 throw new RuntimeException("Simulate exception while loading provider");
 180             }
 181         }
 182 
 183         System.Logger createSimpleLogger(String name) {
 184             PrivilegedAction<System.Logger> pa = () -> SimpleConsoleLogger.makeSimpleLogger(name);
 185             return AccessController.doPrivileged(pa);
 186         }
 187 
 188 
 189         @Override
 190         public Logger getLogger(String name, Class<?> caller) {
 191             SecurityManager sm = System.getSecurityManager();
 192             if (sm != null) {
 193                 sm.checkPermission(LOGGERFINDER_PERMISSION);
 194             }
 195             PrivilegedAction<ClassLoader> pa = () -> caller.getClassLoader();
 196             ClassLoader callerLoader = AccessController.doPrivileged(pa);
 197             if (callerLoader == null) {
 198                 return system.computeIfAbsent(name, (n) -> new LoggerImpl(n, createSimpleLogger(name)));
 199             } else {
 200                 return user.computeIfAbsent(name, (n) -> new LoggerImpl(n, createSimpleLogger(name)));
 201             }
 202         }
 203     }
 204 
 205     public static class BaseLoggerFinder2 extends LoggerFinder implements TestLoggerFinder {
 206 
 207         static final RuntimePermission LOGGERFINDER_PERMISSION =
 208                     new RuntimePermission("loggerFinder");
 209         public BaseLoggerFinder2() {
 210             throw new ServiceConfigurationError("Should not come here");
 211         }
 212         @Override
 213         public Logger getLogger(String name, Class<?> caller) {
 214             throw new ServiceConfigurationError("Should not come here");
 215         }
 216     }
 217 
 218     public static class MyBundle extends ResourceBundle {
 219 
 220         final ConcurrentHashMap<String,String> map = new ConcurrentHashMap<>();
 221 
 222         @Override
 223         protected Object handleGetObject(String key) {
 224             if (key.contains(" (translated)")) {
 225                 throw new RuntimeException("Unexpected key: " + key);
 226             }
 227             return map.computeIfAbsent(key, k -> k.toUpperCase(Locale.ROOT) + " (translated)");
 228         }
 229 
 230         @Override
 231         public Enumeration<String> getKeys() {
 232             return Collections.enumeration(map.keySet());
 233         }




  36 import java.util.HashMap;
  37 import java.util.Map;
  38 import java.util.ResourceBundle;
  39 import java.util.stream.Stream;
  40 import java.util.concurrent.ConcurrentHashMap;
  41 import java.util.concurrent.atomic.AtomicBoolean;
  42 import java.util.concurrent.atomic.AtomicLong;
  43 import java.util.function.Supplier;
  44 import java.lang.System.LoggerFinder;
  45 import java.lang.System.Logger;
  46 import java.lang.System.Logger.Level;
  47 import java.security.AccessController;
  48 import java.security.PrivilegedAction;
  49 import java.util.EnumSet;
  50 import java.util.Iterator;
  51 import java.util.Locale;
  52 import java.util.ServiceConfigurationError;
  53 import java.util.ServiceLoader;
  54 import java.util.concurrent.atomic.AtomicReference;
  55 import jdk.internal.logger.SimpleConsoleLogger;
  56 import java.lang.reflect.Module;
  57 
  58 /**
  59  * @test
  60  * @bug     8140364
  61  * @summary JDK implementation specific unit test for LoggerFinderLoader.
  62  *          Tests the behavior of LoggerFinderLoader with respect to the
  63  *          value of the internal diagnosability switches. Also test the
  64  *          DefaultLoggerFinder and SimpleConsoleLogger implementation.
  65  * @modules java.base/sun.util.logging
  66  *          java.base/jdk.internal.logger
  67  * @build AccessSystemLogger LoggerFinderLoaderTest CustomSystemClassLoader
  68  * @run  driver AccessSystemLogger
  69  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest NOSECURITY
  70  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest NOPERMISSIONS
  71  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader LoggerFinderLoaderTest WITHPERMISSIONS
  72  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest NOSECURITY
  73  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest NOPERMISSIONS
  74  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true LoggerFinderLoaderTest WITHPERMISSIONS
  75  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true -Djdk.logger.finder.error=ERROR LoggerFinderLoaderTest NOSECURITY
  76  * @run  main/othervm -Xbootclasspath/a:boot -Djava.system.class.loader=CustomSystemClassLoader -Dtest.fails=true -Djdk.logger.finder.error=ERROR LoggerFinderLoaderTest NOPERMISSIONS


 150                 return name;
 151             }
 152 
 153             @Override
 154             public boolean isLoggable(Logger.Level level) {
 155                 return logger.isLoggable(level);
 156             }
 157 
 158             @Override
 159             public void log(Logger.Level level, ResourceBundle bundle, String key, Throwable thrown) {
 160                 logger.log(level, bundle, key, thrown);
 161             }
 162 
 163             @Override
 164             public void log(Logger.Level level, ResourceBundle bundle, String format, Object... params) {
 165                 logger.log(level, bundle, format, params);
 166             }
 167 
 168         }
 169 
 170         public Logger getLogger(String name, Module caller);
 171         public Logger getLocalizedLogger(String name, ResourceBundle bundle, Module caller);
 172     }
 173 
 174     public static class BaseLoggerFinder extends LoggerFinder implements TestLoggerFinder {
 175 
 176         static final RuntimePermission LOGGERFINDER_PERMISSION =
 177                     new RuntimePermission("loggerFinder");
 178         public BaseLoggerFinder() {
 179             if (fails.get()) {
 180                 throw new RuntimeException("Simulate exception while loading provider");
 181             }
 182         }
 183 
 184         System.Logger createSimpleLogger(String name) {
 185             PrivilegedAction<System.Logger> pa = () -> SimpleConsoleLogger.makeSimpleLogger(name);
 186             return AccessController.doPrivileged(pa);
 187         }
 188 
 189 
 190         @Override
 191         public Logger getLogger(String name, Module caller) {
 192             SecurityManager sm = System.getSecurityManager();
 193             if (sm != null) {
 194                 sm.checkPermission(LOGGERFINDER_PERMISSION);
 195             }
 196             PrivilegedAction<ClassLoader> pa = () -> caller.getClassLoader();
 197             ClassLoader callerLoader = AccessController.doPrivileged(pa);
 198             if (callerLoader == null) {
 199                 return system.computeIfAbsent(name, (n) -> new LoggerImpl(n, createSimpleLogger(name)));
 200             } else {
 201                 return user.computeIfAbsent(name, (n) -> new LoggerImpl(n, createSimpleLogger(name)));
 202             }
 203         }
 204     }
 205 
 206     public static class BaseLoggerFinder2 extends LoggerFinder implements TestLoggerFinder {
 207 
 208         static final RuntimePermission LOGGERFINDER_PERMISSION =
 209                     new RuntimePermission("loggerFinder");
 210         public BaseLoggerFinder2() {
 211             throw new ServiceConfigurationError("Should not come here");
 212         }
 213         @Override
 214         public Logger getLogger(String name, Module caller) {
 215             throw new ServiceConfigurationError("Should not come here");
 216         }
 217     }
 218 
 219     public static class MyBundle extends ResourceBundle {
 220 
 221         final ConcurrentHashMap<String,String> map = new ConcurrentHashMap<>();
 222 
 223         @Override
 224         protected Object handleGetObject(String key) {
 225             if (key.contains(" (translated)")) {
 226                 throw new RuntimeException("Unexpected key: " + key);
 227             }
 228             return map.computeIfAbsent(key, k -> k.toUpperCase(Locale.ROOT) + " (translated)");
 229         }
 230 
 231         @Override
 232         public Enumeration<String> getKeys() {
 233             return Collections.enumeration(map.keySet());
 234         }


< prev index next >