--- old/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/RootLoggerHandlers.java 2018-01-22 16:36:56.000000000 +0000 +++ new/test/jdk/java/util/logging/LogManager/Configuration/rootLoggerHandlers/RootLoggerHandlers.java 2018-01-22 16:36:55.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 @@ -21,9 +21,11 @@ * questions. */ import java.io.IOException; +import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -39,6 +41,7 @@ * @bug 8191033 * @build custom.DotHandler custom.Handler * @run main/othervm RootLoggerHandlers + * @run main/othervm/java.security.policy==test.policy RootLoggerHandlers * @author danielfuchs */ public class RootLoggerHandlers { @@ -61,7 +64,7 @@ Path initialProps = SRC_DIR.resolve(CONFIG_FILE); Path loggingProps = USER_DIR.resolve(CONFIG_FILE); System.setProperty("java.util.logging.config.file", loggingProps.toString()); - Files.copy(initialProps, loggingProps); + Files.copy(initialProps, loggingProps, StandardCopyOption.REPLACE_EXISTING); System.out.println("Root level is: " + Logger.getLogger("").getLevel()); if (Logger.getLogger("").getLevel() != Level.INFO) { throw new RuntimeException("Expected root level INFO, got: " @@ -73,10 +76,15 @@ // Verify that exactly one of the two handlers is a custom.Handler // Verify that exactly one of the two handlers is a custom.DotHandler // Verify that the two handlers has an id of '1' - checkHandlers(Logger.getLogger("").getHandlers(), + checkHandlers(Logger.getLogger(""), + Logger.getLogger("").getHandlers(), 1L, custom.Handler.class, custom.DotHandler.class); + checkHandlers(Logger.getLogger("global"), + Logger.getGlobal().getHandlers(), + 1L, + custom.GlobalHandler.class); // The log message "hi" should appear twice on the console. // We don't check that. This is just for log analysis in case @@ -102,9 +110,13 @@ // .handlers=custom.DotHandler was ignored. // Verify that the handler is a custom.Handler // Verify that the handler has an id of '2' - checkHandlers(Logger.getLogger("").getHandlers(), + checkHandlers(Logger.getLogger(""), + Logger.getLogger("").getHandlers(), 2L, custom.Handler.class); + checkHandlers(Logger.getGlobal(), + Logger.getGlobal().getHandlers(), + 1L); // The log message "there" should appear only once on the console. // We don't check that. This is just for log analysis in case @@ -130,9 +142,45 @@ // .handlers=custom.DotHandler was ignored. // Verify that the handler is a custom.Handler // Verify that the handler has an id of '3' - checkHandlers(Logger.getLogger("").getHandlers(), + checkHandlers(Logger.getLogger(""), + Logger.getLogger("").getHandlers(), 3L, custom.Handler.class); + checkHandlers(Logger.getGlobal(), + Logger.getGlobal().getHandlers(), + 1L); + + LogManager.getLogManager().reset(); + LogManager.getLogManager().updateConfiguration((s) -> (o,n) -> n); + // Verify that we have only one handler, configured with + // handlers=custom.Handler, and that the other configured with + // .handlers=custom.DotHandler was ignored. + // Verify that the handler is a custom.Handler + // Verify that the handler has an id of '4' + checkHandlers(Logger.getLogger(""), + Logger.getLogger("").getHandlers(), + 4L, + custom.Handler.class); + checkHandlers(Logger.getGlobal(), + Logger.getGlobal().getHandlers(), + 2L, + custom.GlobalHandler.class); + + LogManager.getLogManager().updateConfiguration((s) -> (o,n) -> n); + // Verify that we have only one handler, configured with + // handlers=custom.Handler, and that the other configured with + // .handlers=custom.DotHandler was ignored. + // Verify that the handler is a custom.Handler + // Verify that the handler has an id of '4' + checkHandlers(Logger.getLogger(""), + Logger.getLogger("").getHandlers(), + 4L, + custom.Handler.class); + checkHandlers(Logger.getGlobal(), + Logger.getGlobal().getHandlers(), + 2L, + custom.GlobalHandler.class); + // The log message "done" should appear only once on the console. // We don't check that. This is just for log analysis in case @@ -140,11 +188,11 @@ Logger.getAnonymousLogger().info("done!"); } - static void checkHandlers(Handler[] handlers, Long expectedID, Class... clz) { + static void checkHandlers(Logger logger, Handler[] handlers, Long expectedID, Class... clz) { // Verify that we have the expected number of handlers. if (Stream.of(handlers).count() != clz.length) { throw new RuntimeException("Expected " + clz.length + " handlers, got: " - + List.of(Logger.getLogger("").getHandlers())); + + List.of(logger.getHandlers())); } for (Class cl : clz) { // Verify that the handlers are of the expected class. @@ -155,16 +203,16 @@ .filter(cl::equals) .count() != 1) { throw new RuntimeException("Expected one " + cl +", got: " - + List.of(Logger.getLogger("").getHandlers())); + + List.of(logger.getHandlers())); } } // Verify that all handlers have the expected ID - if (Stream.of(Logger.getLogger("").getHandlers()) + if (Stream.of(logger.getHandlers()) .map(RootLoggerHandlers::getId) .filter(expectedID::equals) .count() != clz.length) { throw new RuntimeException("Expected ids to be " + expectedID + ", got: " - + List.of(Logger.getLogger("").getHandlers())); + + List.of(logger.getHandlers())); } } @@ -175,6 +223,9 @@ if (h instanceof custom.DotHandler) { return ((custom.DotHandler)h).id; } + if (h instanceof custom.GlobalHandler) { + return ((custom.GlobalHandler)h).id; + } return -1; } }