53 import java.util.concurrent.atomic.AtomicReference; |
53 import java.util.concurrent.atomic.AtomicReference; |
54 import java.util.function.Function; |
54 import java.util.function.Function; |
55 import jdk.internal.logger.DefaultLoggerFinder; |
55 import jdk.internal.logger.DefaultLoggerFinder; |
56 import jdk.internal.logger.SimpleConsoleLogger; |
56 import jdk.internal.logger.SimpleConsoleLogger; |
57 import sun.util.logging.PlatformLogger; |
57 import sun.util.logging.PlatformLogger; |
|
58 import java.lang.reflect.Module; |
58 |
59 |
59 /** |
60 /** |
60 * @test |
61 * @test |
61 * @bug 8140364 8145686 |
62 * @bug 8140364 8145686 |
62 * @summary JDK implementation specific unit test for the base DefaultLoggerFinder. |
63 * @summary JDK implementation specific unit test for the base DefaultLoggerFinder. |
110 public final static AtomicBoolean fails = new AtomicBoolean(); |
111 public final static AtomicBoolean fails = new AtomicBoolean(); |
111 public final static AtomicReference<String> conf = new AtomicReference<>(""); |
112 public final static AtomicReference<String> conf = new AtomicReference<>(""); |
112 public final static AtomicLong sequencer = new AtomicLong(); |
113 public final static AtomicLong sequencer = new AtomicLong(); |
113 |
114 |
114 |
115 |
115 public Logger getLogger(String name, Class<?> caller); |
116 public Logger getLogger(String name, Module caller); |
116 public Logger getLocalizedLogger(String name, ResourceBundle bundle, Class<?> caller); |
117 public Logger getLocalizedLogger(String name, ResourceBundle bundle, Module caller); |
117 void setLevel(Logger logger, Level level, Class<?> caller); |
118 void setLevel(Logger logger, Level level, Module caller); |
118 void setLevel(Logger logger, PlatformLogger.Level level, Class<?> caller); |
119 void setLevel(Logger logger, PlatformLogger.Level level, Module caller); |
119 PlatformLogger.Bridge asPlatformLoggerBridge(Logger logger); |
120 PlatformLogger.Bridge asPlatformLoggerBridge(Logger logger); |
120 } |
121 } |
121 |
122 |
122 public static class BaseLoggerFinder extends DefaultLoggerFinder implements TestLoggerFinder { |
123 public static class BaseLoggerFinder extends DefaultLoggerFinder implements TestLoggerFinder { |
123 |
124 |
128 throw new RuntimeException("Simulate exception while loading provider"); |
129 throw new RuntimeException("Simulate exception while loading provider"); |
129 } |
130 } |
130 } |
131 } |
131 |
132 |
132 @Override |
133 @Override |
133 public void setLevel(Logger logger, Level level, Class<?> caller) { |
134 public void setLevel(Logger logger, Level level, Module caller) { |
134 PrivilegedAction<Void> pa = () -> { |
135 PrivilegedAction<Void> pa = () -> { |
135 setLevel(logger, PlatformLogger.toPlatformLevel(level), caller); |
136 setLevel(logger, PlatformLogger.toPlatformLevel(level), caller); |
136 return null; |
137 return null; |
137 }; |
138 }; |
138 AccessController.doPrivileged(pa); |
139 AccessController.doPrivileged(pa); |
139 } |
140 } |
140 |
141 |
141 @Override |
142 @Override |
142 public void setLevel(Logger logger, PlatformLogger.Level level, Class<?> caller) { |
143 public void setLevel(Logger logger, PlatformLogger.Level level, Module caller) { |
143 PrivilegedAction<Logger> pa = () -> demandLoggerFor(logger.getName(), caller); |
144 PrivilegedAction<Logger> pa = () -> demandLoggerFor(logger.getName(), caller); |
144 Logger impl = AccessController.doPrivileged(pa); |
145 Logger impl = AccessController.doPrivileged(pa); |
145 SimpleConsoleLogger.class.cast(impl) |
146 SimpleConsoleLogger.class.cast(impl) |
146 .getLoggerConfiguration() |
147 .getLoggerConfiguration() |
147 .setPlatformLevel(level); |
148 .setPlatformLevel(level); |
604 private static void testLogger(TestLoggerFinder provider, |
605 private static void testLogger(TestLoggerFinder provider, |
605 Map<Logger, String> loggerDescMap, |
606 Map<Logger, String> loggerDescMap, |
606 String name, |
607 String name, |
607 ResourceBundle loggerBundle, |
608 ResourceBundle loggerBundle, |
608 Logger logger, |
609 Logger logger, |
609 Class<?> caller) { |
610 Class<?> callerClass) { |
610 |
611 |
611 System.out.println("Testing " + loggerDescMap.get(logger) + " [" + logger +"]"); |
612 System.out.println("Testing " + loggerDescMap.get(logger) + " [" + logger +"]"); |
612 AtomicLong sequencer = TestLoggerFinder.sequencer; |
613 AtomicLong sequencer = TestLoggerFinder.sequencer; |
613 |
614 |
|
615 Module caller = callerClass.getModule(); |
614 Foo foo = new Foo(); |
616 Foo foo = new Foo(); |
615 String fooMsg = foo.toString(); |
617 String fooMsg = foo.toString(); |
616 for (Level loggerLevel : Level.values()) { |
618 for (Level loggerLevel : Level.values()) { |
617 provider.setLevel(logger, loggerLevel, caller); |
619 provider.setLevel(logger, loggerLevel, caller); |
618 for (Level messageLevel : Level.values()) { |
620 for (Level messageLevel : Level.values()) { |