test/jdk/java/lang/System/LoggerFinder/internal/PlatformLoggerBridgeTest/PlatformLoggerBridgeTest.java
changeset 53044 432795b1c2c8
parent 47216 71c04702a3d5
child 55462 6dfdcd31463d
--- a/test/jdk/java/lang/System/LoggerFinder/internal/PlatformLoggerBridgeTest/PlatformLoggerBridgeTest.java	Wed Dec 19 10:36:16 2018 +0000
+++ b/test/jdk/java/lang/System/LoggerFinder/internal/PlatformLoggerBridgeTest/PlatformLoggerBridgeTest.java	Wed Dec 19 11:48:34 2018 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, 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
@@ -58,7 +58,7 @@
  *          backend whose loggers implement PlatformLogger.Bridge.
  * @modules java.base/sun.util.logging
  *          java.logging
- * @build CustomSystemClassLoader PlatformLoggerBridgeTest
+ * @build CustomSystemClassLoader LogProducerFinder PlatformLoggerBridgeTest
  * @run  main/othervm -Djava.system.class.loader=CustomSystemClassLoader PlatformLoggerBridgeTest NOSECURITY
  * @run  main/othervm -Djava.system.class.loader=CustomSystemClassLoader PlatformLoggerBridgeTest NOPERMISSIONS
  * @run  main/othervm -Djava.system.class.loader=CustomSystemClassLoader PlatformLoggerBridgeTest WITHPERMISSIONS
@@ -89,19 +89,19 @@
         }
     };
 
+    public static final Queue<LogEvent> eventQueue = new ArrayBlockingQueue<>(128);
+
     static final Class<?> providerClass;
     static {
         try {
             // Preload classes before the security manager is on.
-            providerClass = ClassLoader.getSystemClassLoader().loadClass("PlatformLoggerBridgeTest$LogProducerFinder");
+            providerClass = ClassLoader.getSystemClassLoader().loadClass("LogProducerFinder");
             ((LoggerFinder)providerClass.newInstance()).getLogger("foo", providerClass.getModule());
         } catch (Exception ex) {
             throw new ExceptionInInitializerError(ex);
         }
     }
 
-    public static final Queue<LogEvent> eventQueue = new ArrayBlockingQueue<>(128);
-
     public static final class LogEvent implements Cloneable {
 
         public LogEvent() {
@@ -234,200 +234,182 @@
 
     }
 
-    public static class LogProducerFinder extends LoggerFinder {
-        static final RuntimePermission LOGGERFINDER_PERMISSION =
-                new RuntimePermission("loggerFinder");
-        final ConcurrentHashMap<String, LoggerImpl> system = new ConcurrentHashMap<>();
-        final ConcurrentHashMap<String, LoggerImpl> user = new ConcurrentHashMap<>();
-
-        public class LoggerImpl implements Logger, PlatformLogger.Bridge {
-            private final String name;
-            private sun.util.logging.PlatformLogger.Level level = sun.util.logging.PlatformLogger.Level.INFO;
-            private sun.util.logging.PlatformLogger.Level OFF = sun.util.logging.PlatformLogger.Level.OFF;
-            private sun.util.logging.PlatformLogger.Level FINE = sun.util.logging.PlatformLogger.Level.FINE;
-            private sun.util.logging.PlatformLogger.Level FINER = sun.util.logging.PlatformLogger.Level.FINER;
-            private sun.util.logging.PlatformLogger.Level FINEST = sun.util.logging.PlatformLogger.Level.FINEST;
-            private sun.util.logging.PlatformLogger.Level CONFIG = sun.util.logging.PlatformLogger.Level.CONFIG;
-            private sun.util.logging.PlatformLogger.Level INFO = sun.util.logging.PlatformLogger.Level.INFO;
-            private sun.util.logging.PlatformLogger.Level WARNING = sun.util.logging.PlatformLogger.Level.WARNING;
-            private sun.util.logging.PlatformLogger.Level SEVERE = sun.util.logging.PlatformLogger.Level.SEVERE;
+    public static class LoggerImpl implements System.Logger, PlatformLogger.Bridge {
+        private final String name;
+        private sun.util.logging.PlatformLogger.Level level = sun.util.logging.PlatformLogger.Level.INFO;
+        private sun.util.logging.PlatformLogger.Level OFF = sun.util.logging.PlatformLogger.Level.OFF;
+        private sun.util.logging.PlatformLogger.Level FINE = sun.util.logging.PlatformLogger.Level.FINE;
+        private sun.util.logging.PlatformLogger.Level FINER = sun.util.logging.PlatformLogger.Level.FINER;
+        private sun.util.logging.PlatformLogger.Level FINEST = sun.util.logging.PlatformLogger.Level.FINEST;
+        private sun.util.logging.PlatformLogger.Level CONFIG = sun.util.logging.PlatformLogger.Level.CONFIG;
+        private sun.util.logging.PlatformLogger.Level INFO = sun.util.logging.PlatformLogger.Level.INFO;
+        private sun.util.logging.PlatformLogger.Level WARNING = sun.util.logging.PlatformLogger.Level.WARNING;
+        private sun.util.logging.PlatformLogger.Level SEVERE = sun.util.logging.PlatformLogger.Level.SEVERE;
 
-            public LoggerImpl(String name) {
-                this.name = name;
-            }
-
-            @Override
-            public String getName() {
-                return name;
-            }
-
-            @Override
-            public boolean isLoggable(Level level) {
-                return this.level != OFF && this.level.intValue() <= level.getSeverity();
-            }
-
-            @Override
-            public void log(Level level, ResourceBundle bundle,
-                    String key, Throwable thrown) {
-                throw new UnsupportedOperationException();
-            }
+        public LoggerImpl(String name) {
+            this.name = name;
+        }
 
-            @Override
-            public void log(Level level, ResourceBundle bundle,
-                    String format, Object... params) {
-                throw new UnsupportedOperationException();
-            }
-
-            void log(LogEvent event) {
-                eventQueue.add(event);
-            }
+        public void configureLevel(sun.util.logging.PlatformLogger.Level level) {
+            this.level = level;
+        }
 
-            @Override
-            public void log(Level level, Supplier<String> msgSupplier) {
-                throw new UnsupportedOperationException();
-            }
-
-            @Override
-            public void log(Level level, Supplier<String> msgSupplier,
-                            Throwable thrown) {
-                throw new UnsupportedOperationException();
-            }
+        @Override
+        public String getName() {
+            return name;
+        }
 
-            @Override
-            public void log(sun.util.logging.PlatformLogger.Level level, String msg) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, null, msg, null, (Object[])null));
-            }
-
-            @Override
-            public void log(sun.util.logging.PlatformLogger.Level level,
-                    Supplier<String> msgSupplier) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, null, msgSupplier, null, (Object[])null));
-            }
+        @Override
+        public boolean isLoggable(Level level) {
+            return this.level != OFF && this.level.intValue() <= level.getSeverity();
+        }
 
-            @Override
-            public void log(sun.util.logging.PlatformLogger.Level level, String msg,
-                    Object... params) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, null, msg, null, params));
-            }
-
-            @Override
-            public void log(sun.util.logging.PlatformLogger.Level level, String msg,
-                    Throwable thrown) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, null, msg, thrown, (Object[])null));
-            }
+        @Override
+        public void log(Level level, ResourceBundle bundle,
+                        String key, Throwable thrown) {
+            throw new UnsupportedOperationException();
+        }
 
-            @Override
-            public void log(sun.util.logging.PlatformLogger.Level level, Throwable thrown,
-                    Supplier<String> msgSupplier) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, null, msgSupplier, thrown, (Object[])null));
-            }
+        @Override
+        public void log(Level level, ResourceBundle bundle,
+                        String format, Object... params) {
+            throw new UnsupportedOperationException();
+        }
 
-            @Override
-            public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, String msg) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, null, msg, null, (Object[])null));
-            }
+        void log(PlatformLoggerBridgeTest.LogEvent event) {
+            eventQueue.add(event);
+        }
 
-            @Override
-            public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, Supplier<String> msgSupplier) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, null, msgSupplier, null, (Object[])null));
-            }
+        @Override
+        public void log(Level level, Supplier<String> msgSupplier) {
+            throw new UnsupportedOperationException();
+        }
 
-            @Override
-            public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, String msg, Object... params) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, null, msg, null, params));
-            }
-
-            @Override
-            public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, String msg, Throwable thrown) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, null, msg, thrown, (Object[])null));
-            }
+        @Override
+        public void log(Level level, Supplier<String> msgSupplier,
+                        Throwable thrown) {
+            throw new UnsupportedOperationException();
+        }
 
-            @Override
-            public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, Throwable thrown,
-                    Supplier<String> msgSupplier) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, null, msgSupplier, thrown, (Object[])null));
-            }
+        @Override
+        public void log(sun.util.logging.PlatformLogger.Level level, String msg) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, null, msg, null, (Object[]) null));
+        }
 
-            @Override
-            public void logrb(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, ResourceBundle bundle, String msg,
-                    Object... params) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, bundle, msg, null, params));
-            }
-
-            @Override
-            public void logrb(sun.util.logging.PlatformLogger.Level level, ResourceBundle bundle,
-                    String msg, Object... params) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, bundle, msg, null, params));
-            }
+        @Override
+        public void log(sun.util.logging.PlatformLogger.Level level,
+                        Supplier<String> msgSupplier) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, null, msgSupplier, null, (Object[]) null));
+        }
 
-            @Override
-            public void logrb(sun.util.logging.PlatformLogger.Level level, String sourceClass,
-                    String sourceMethod, ResourceBundle bundle, String msg,
-                    Throwable thrown) {
-                log(LogEvent.of(isLoggable(level), name,
-                        sourceClass, sourceMethod,
-                        level, bundle, msg, thrown, (Object[])null));
-            }
+        @Override
+        public void log(sun.util.logging.PlatformLogger.Level level, String msg,
+                        Object... params) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, null, msg, null, params));
+        }
 
-            @Override
-            public void logrb(sun.util.logging.PlatformLogger.Level level, ResourceBundle bundle,
-                    String msg, Throwable thrown) {
-                log(LogEvent.of(isLoggable(level), name, null, null,
-                        level, bundle, msg, thrown, (Object[])null));
-            }
-
-            @Override
-            public boolean isLoggable(sun.util.logging.PlatformLogger.Level level) {
-                return this.level != OFF && level.intValue()
-                        >= this.level.intValue();
-            }
-
-            @Override
-            public boolean isEnabled() {
-                return this.level != OFF;
-            }
-
-
+        @Override
+        public void log(sun.util.logging.PlatformLogger.Level level, String msg,
+                        Throwable thrown) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, null, msg, thrown, (Object[]) null));
         }
 
         @Override
-        public Logger getLogger(String name, Module caller) {
-            SecurityManager sm = System.getSecurityManager();
-            if (sm != null) {
-                sm.checkPermission(LOGGERFINDER_PERMISSION);
-            }
-            PrivilegedAction<ClassLoader> pa = () -> caller.getClassLoader();
-            ClassLoader callerLoader = AccessController.doPrivileged(pa);
-            if (callerLoader == null) {
-                return system.computeIfAbsent(name, (n) -> new LoggerImpl(n));
-            } else {
-                return user.computeIfAbsent(name, (n) -> new LoggerImpl(n));
-            }
+        public void log(sun.util.logging.PlatformLogger.Level level, Throwable thrown,
+                        Supplier<String> msgSupplier) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, null, msgSupplier, thrown, (Object[]) null));
+        }
+
+        @Override
+        public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                         String sourceMethod, String msg) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, null, msg, null, (Object[]) null));
+        }
+
+        @Override
+        public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                         String sourceMethod, Supplier<String> msgSupplier) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, null, msgSupplier, null, (Object[]) null));
+        }
+
+        @Override
+        public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                         String sourceMethod, String msg, Object... params) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, null, msg, null, params));
+        }
+
+        @Override
+        public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                         String sourceMethod, String msg, Throwable thrown) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, null, msg, thrown, (Object[]) null));
+        }
+
+        @Override
+        public void logp(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                         String sourceMethod, Throwable thrown,
+                         Supplier<String> msgSupplier) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, null, msgSupplier, thrown, (Object[]) null));
         }
+
+        @Override
+        public void logrb(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                          String sourceMethod, ResourceBundle bundle, String msg,
+                          Object... params) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, bundle, msg, null, params));
+        }
+
+        @Override
+        public void logrb(sun.util.logging.PlatformLogger.Level level, ResourceBundle bundle,
+                          String msg, Object... params) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, bundle, msg, null, params));
+        }
+
+        @Override
+        public void logrb(sun.util.logging.PlatformLogger.Level level, String sourceClass,
+                          String sourceMethod, ResourceBundle bundle, String msg,
+                          Throwable thrown) {
+            log(LogEvent.of(isLoggable(level), name,
+                    sourceClass, sourceMethod,
+                    level, bundle, msg, thrown, (Object[]) null));
+        }
+
+        @Override
+        public void logrb(sun.util.logging.PlatformLogger.Level level, ResourceBundle bundle,
+                          String msg, Throwable thrown) {
+            log(LogEvent.of(isLoggable(level), name, null, null,
+                    level, bundle, msg, thrown, (Object[]) null));
+        }
+
+        @Override
+        public boolean isLoggable(sun.util.logging.PlatformLogger.Level level) {
+            return this.level != OFF && level.intValue()
+                    >= this.level.intValue();
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return this.level != OFF;
+        }
+
+
     }
 
     static final sun.util.logging.PlatformLogger.Level[] julLevels = {
@@ -593,11 +575,11 @@
             System.out.println("Got expected exception for system logger: " + acx);
         }
 
-        final LogProducerFinder.LoggerImpl sysSink;
+        final LoggerImpl sysSink;
         boolean old = allowControl.get().get();
         allowControl.get().set(true);
         try {
-           sysSink = LogProducerFinder.LoggerImpl.class.cast(
+           sysSink = LoggerImpl.class.cast(
                         provider.getLogger("foo", Thread.class.getModule()));
         } finally {
             allowControl.get().set(old);
@@ -647,20 +629,20 @@
         }
     }
 
-    static void setLevel( LogProducerFinder.LoggerImpl sink,
+    static void setLevel(LoggerImpl sink,
             sun.util.logging.PlatformLogger.Level loggerLevel) {
-        sink.level = loggerLevel;
+        sink.configureLevel(loggerLevel);
     }
 
     // Calls the methods defined on LogProducer and verify the
-    // parameters received by the underlying LogProducerFinder.LoggerImpl
+    // parameters received by the underlying LoggerImpl
     // logger.
     private static void testLogger(LoggerFinder provider,
             Map<PlatformLogger, String> loggerDescMap,
             String name,
             ResourceBundle loggerBundle,
             PlatformLogger logger,
-            LogProducerFinder.LoggerImpl sink) {
+            LoggerImpl sink) {
 
         System.out.println("Testing " + loggerDescMap.get(logger) + " [" + logger +"]");
         final sun.util.logging.PlatformLogger.Level OFF = sun.util.logging.PlatformLogger.Level.OFF;