test/jdk/java/util/logging/LogManager/RootLogger/setLevel/TestRootLoggerLevel.java
author kvn
Fri, 21 Jun 2019 13:04:14 -0700
changeset 55462 6dfdcd31463d
parent 47216 71c04702a3d5
permissions -rw-r--r--
8185139: [Graal] Tests which set too restrictive security manager fail with Graal Summary: tests should also check default policy Reviewed-by: mchung, dfuchs, alanb, mullan
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     1
/*
55462
6dfdcd31463d 8185139: [Graal] Tests which set too restrictive security manager fail with Graal
kvn
parents: 47216
diff changeset
     2
 * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     4
 *
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     7
 * published by the Free Software Foundation.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     8
 *
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    13
 * accompanied this code).
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    14
 *
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    18
 *
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    21
 * questions.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    22
 */
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    23
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    24
import java.security.Permission;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    25
import java.security.Permissions;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    26
import java.security.Policy;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    27
import java.security.ProtectionDomain;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    28
import java.util.logging.Level;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    29
import java.util.logging.Logger;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    30
import java.util.logging.LoggingPermission;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    31
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    32
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    33
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    34
/**
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    35
 * @test
21659
3b80f3e5b552 8026952: Test java/util/logging/LogManager/RootLogger/setLevel/TestRootLoggerLevel.java has wrong @bug id
dfuchs
parents: 21304
diff changeset
    36
 * @bug 8026499
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    37
 * @summary checks that Logger.getLogger("").setLevel() is working correctly.
30820
0d4717a011d3 8081347: Add @modules to jdk_core tests
mchung
parents: 21659
diff changeset
    38
 * @modules java.base/sun.util.logging
35768
7066da300a08 8149391: Fix module dependences in java/util tests
shurailine
parents: 30820
diff changeset
    39
 *          java.logging
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    40
 * @build TestRootLoggerLevel
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    41
 * @run main/othervm -Dtest.security=on TestRootLoggerLevel
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    42
 * @run main/othervm -Dtest.security=off TestRootLoggerLevel
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    43
 * @author danielfuchs
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    44
 */
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    45
public class TestRootLoggerLevel {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    46
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    47
    public static enum Loggers {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    48
        ROOT("", "root"),
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    49
        GLOBAL(Logger.GLOBAL_LOGGER_NAME);
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    50
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    51
        private final String name;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    52
        private final String displayName;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    53
        Loggers(String name) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    54
            this(name, name);
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    55
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    56
        Loggers(String name, String displayName) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    57
            this.name = name;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    58
            this.displayName = displayName;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    59
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    60
    }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    61
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    62
    public static void main(String[] args) throws Exception {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    63
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    64
        for (Loggers log : Loggers.values()) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    65
            System.out.println(log.displayName + ": "
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    66
                    + Logger.getLogger(log.name)
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    67
                    + ": " + Logger.getLogger(log.name).getLevel());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    68
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    69
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    70
        if ("on".equals(System.getProperty("test.security","on"))) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    71
            System.out.println("*** SecurityManager is ON");
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    72
            Policy.setPolicy(new SimplePolicy());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    73
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    74
            System.setSecurityManager(new SecurityManager());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    75
        } else {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    76
            System.out.println("*** SecurityManager is OFF");
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    77
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    78
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    79
        // Before the fix, setting the root logger level here had only
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    80
        // a transient effect...
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    81
        for (Loggers log : Loggers.values()) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    82
            System.out.println("Logger.getLogger(\""
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    83
                    + log.name
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    84
                    + "\").setLevel(Level.FINEST);");
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    85
            Logger.getLogger(log.name).setLevel(Level.FINEST);
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    86
            System.out.println(log.displayName + ": "
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    87
                    + Logger.getLogger(log.name)
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    88
                    + ": " + Logger.getLogger(log.name).getLevel());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    89
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    90
            // At this point - the root logger should have a level which is
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    91
            // FINEST - just check it here for sanity.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    92
            if (Logger.getLogger(log.name).getLevel() != Level.FINEST) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    93
                throw new RuntimeException("Logger " + log.displayName
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    94
                        + " level should be FINEST: "
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    95
                        + Logger.getLogger(log.name).getLevel());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    96
            }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    97
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    98
        // Initializing some PlatformLogger caused the root logger
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
    99
        // level to be reset to INFO.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   100
        //
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   101
        final Object platformLogger =
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   102
                sun.util.logging.PlatformLogger.getLogger("java.foo");
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   103
        System.out.println("Got platform logger: " + platformLogger);
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   104
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   105
        for (Loggers log : Loggers.values()) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   106
            // Check that the root logger still has the FINEST value assigned
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   107
            // to it earlier.
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   108
            System.out.println(log.displayName + ": "
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   109
                    + Logger.getLogger(log.name)
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   110
                    + ": " + Logger.getLogger(log.name).getLevel());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   111
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   112
            if (Logger.getLogger(log.name).getLevel() != Level.FINEST) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   113
                throw new RuntimeException("Logger " + log.displayName
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   114
                        + " level should be FINEST: "
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   115
                        + Logger.getLogger(log.name).getLevel());
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   116
            }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   117
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   118
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   119
     }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   120
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   121
    private static final class SimplePolicy extends Policy {
55462
6dfdcd31463d 8185139: [Graal] Tests which set too restrictive security manager fail with Graal
kvn
parents: 47216
diff changeset
   122
6dfdcd31463d 8185139: [Graal] Tests which set too restrictive security manager fail with Graal
kvn
parents: 47216
diff changeset
   123
        static final Policy DEFAULT_POLICY = Policy.getPolicy();
6dfdcd31463d 8185139: [Graal] Tests which set too restrictive security manager fail with Graal
kvn
parents: 47216
diff changeset
   124
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   125
        private final Permissions perms;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   126
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   127
        private static final Permissions permissions(Permission... perms) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   128
            Permissions permissions = new Permissions();
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   129
            for (Permission perm : perms) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   130
                permissions.add(perm);
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   131
            }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   132
            return permissions;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   133
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   134
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   135
        SimplePolicy() {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   136
            this(permissions(new LoggingPermission("control", null),
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   137
                    new RuntimePermission("accessClassInPackage.sun.util.logging")
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   138
            ));
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   139
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   140
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   141
        SimplePolicy(Permissions perms) {
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   142
            this.perms = perms;
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   143
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   144
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   145
        @Override
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   146
        public boolean implies(ProtectionDomain domain, Permission permission) {
55462
6dfdcd31463d 8185139: [Graal] Tests which set too restrictive security manager fail with Graal
kvn
parents: 47216
diff changeset
   147
            return perms.implies(permission) || DEFAULT_POLICY.implies(domain, permission);
21304
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   148
        }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   149
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   150
    }
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   151
7971ecf0fbed 8026499: Root Logger level can be reset unexpectedly
dfuchs
parents:
diff changeset
   152
}