jdk/test/java/util/logging/ParentLoggersTest.java
author mchung
Wed, 16 Jun 2010 23:27:41 -0700
changeset 5803 c3ddaebe216b
parent 2 90ce3da70b43
child 10607 1ba66093449c
permissions -rw-r--r--
6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode Summary: Check against the list of loggers added since the test begins to run Reviewed-by: dcubed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
 * @test
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * @bug     6498300
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * @summary regression: parent loggers are not properly registered
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * @author  ss45998
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 * @build ParentLoggersTest
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 * @run main ParentLoggersTest
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * There are several original tests which were failed when
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * this regression was introduced. This is an extra test
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * to ensure that the parent loggers with the defined
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * .level property are implicitly registered.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
import java.util.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    20
import java.io.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    21
import java.util.logging.*;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
public class ParentLoggersTest {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
    static final LogManager  logMgr     = LogManager.getLogManager();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
    static final PrintStream out        = System.out;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
    static final boolean     PASSED     = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
    static final boolean     FAILED     = false;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
    static final String      MSG_PASSED = "ParentLoggersTest: passed";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
    static final String      MSG_FAILED = "ParentLoggersTest: failed";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
    /* Properties */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
    static final String TST_SRC_PROP    = "test.src";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
    static final String CFG_FILE_PROP   = "java.util.logging.config.file";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
    static final String LM_PROP_FNAME   = "ParentLoggersTest.props";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
    /* Logger names */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
    static final String PARENT_NAME_1   = "myParentLogger";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
    static final String PARENT_NAME_2   = "abc.xyz.foo";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
    static final String LOGGER_NAME_1   = PARENT_NAME_1 + ".myLogger";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
    static final String LOGGER_NAME_2   = PARENT_NAME_2 + ".myBar.myLogger";
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    43
    static final List<String> initialLoggerNames = new ArrayList<String>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
    public static void main(String args[]) throws Exception {
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    45
        // cache the initial set of loggers before this test begins
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    46
        // to add any loggers
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    47
        Enumeration<String> e = logMgr.getLoggerNames();
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    48
        List<String> defaultLoggers = getDefaultLoggerNames();
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    49
        while (e.hasMoreElements()) {
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    50
            String logger = e.nextElement();
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    51
            if (!defaultLoggers.contains(logger)) {
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    52
                initialLoggerNames.add(logger);
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    53
            }
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    54
        };
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    55
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
        String tstSrc = System.getProperty(TST_SRC_PROP);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
        File   fname  = new File(tstSrc, LM_PROP_FNAME);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
        String prop   = fname.getCanonicalPath();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
        System.setProperty(CFG_FILE_PROP, prop);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
        logMgr.readConfiguration();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
90ce3da70b43 Initial load
duke
parents:
diff changeset
    62
        System.out.println();
90ce3da70b43 Initial load
duke
parents:
diff changeset
    63
        if (checkLoggers() == PASSED) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    64
            System.out.println(MSG_PASSED);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    65
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    66
            System.out.println(MSG_FAILED);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
            throw new Exception(MSG_FAILED);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    71
    public static List<String> getDefaultLoggerNames() {
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    72
        List<String> expectedLoggerNames = new ArrayList<String>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    73
90ce3da70b43 Initial load
duke
parents:
diff changeset
    74
        // LogManager always creates two loggers:
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    75
        expectedLoggerNames.add("");       // root   logger: ""
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    76
        expectedLoggerNames.add("global"); // global logger: "global"
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    77
        return expectedLoggerNames;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    78
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    79
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
    /* Check: getLoggerNames() must return correct names
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
     *        for registered loggers and their parents.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
     * Returns boolean values: PASSED or FAILED
90ce3da70b43 Initial load
duke
parents:
diff changeset
    83
     */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    84
    public static boolean checkLoggers() {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    85
        String failMsg = "# checkLoggers: getLoggerNames() returned unexpected loggers";
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    86
        Vector<String> expectedLoggerNames = new Vector<String>(getDefaultLoggerNames());
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    87
90ce3da70b43 Initial load
duke
parents:
diff changeset
    88
        // Create the logger LOGGER_NAME_1
90ce3da70b43 Initial load
duke
parents:
diff changeset
    89
        Logger logger1 = Logger.getLogger(LOGGER_NAME_1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    90
        expectedLoggerNames.addElement(PARENT_NAME_1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    91
        expectedLoggerNames.addElement(LOGGER_NAME_1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    92
90ce3da70b43 Initial load
duke
parents:
diff changeset
    93
        // Create the logger LOGGER_NAME_2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    94
        Logger logger2 = Logger.getLogger(LOGGER_NAME_2);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    95
        expectedLoggerNames.addElement(PARENT_NAME_2);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
        expectedLoggerNames.addElement(LOGGER_NAME_2);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    97
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    98
        Enumeration<String> returnedLoggersEnum = logMgr.getLoggerNames();
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
    99
        Vector<String>      returnedLoggerNames = new Vector<String>(0);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
        while (returnedLoggersEnum.hasMoreElements()) {
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   101
           String logger = returnedLoggersEnum.nextElement();
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   102
            if (!initialLoggerNames.contains(logger)) {
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   103
                // filter out the loggers that have been added before this test runs
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   104
                returnedLoggerNames.addElement(logger);
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   105
            }
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   106
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
        };
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
        return checkNames(expectedLoggerNames, returnedLoggerNames, failMsg);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
90ce3da70b43 Initial load
duke
parents:
diff changeset
   112
    // Returns boolean values: PASSED or FAILED
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   113
    private static boolean checkNames(Vector<String> expNames,
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   114
                                      Vector<String> retNames,
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
                                      String failMsg) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
        boolean status = PASSED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
90ce3da70b43 Initial load
duke
parents:
diff changeset
   118
        if (expNames.size() != retNames.size()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   119
            status = FAILED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
            boolean checked[] = new boolean[retNames.size()];
90ce3da70b43 Initial load
duke
parents:
diff changeset
   122
            for (int i = 0; i < expNames.size(); i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   123
                 int j = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   124
                for (; j < retNames.size(); j++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
                    if (!checked[j] &&
90ce3da70b43 Initial load
duke
parents:
diff changeset
   126
                        expNames.elementAt(i).equals(retNames.elementAt(j))) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   127
                        checked[j] = true;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   128
                        break;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   129
                    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   130
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   131
                if (j >= retNames.size()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
                    status = FAILED;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   133
                    break;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   134
                }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   136
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   137
        if (!status) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   138
            printFailMsg(expNames, retNames, failMsg);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   139
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
        return status;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
5803
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   143
    private static void printFailMsg(Vector<String> expNames,
c3ddaebe216b 6961408: test/java/util/logging/ParentLoggersTest.java fails in samevm mode
mchung
parents: 2
diff changeset
   144
                                     Vector<String> retNames,
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   145
                                     String failMsg) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   146
        out.println();
90ce3da70b43 Initial load
duke
parents:
diff changeset
   147
        out.println(failMsg);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   148
        if (expNames.size() == 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   149
            out.println("# there are NO expected logger names");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   150
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   151
            out.println("# expected logger names (" + expNames.size() + "):");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   152
            for (int i = 0; i < expNames.size(); i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   153
               out.println(" expNames[" + i + "] = " + expNames.elementAt(i));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   155
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   156
        if (retNames.size() == 0) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   157
            out.println("# there are NO returned logger names");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   158
        } else {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   159
            out.println("# returned logger names (" + retNames.size() + "):");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   160
            for (int i = 0; i < retNames.size(); i++) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   161
               out.println("  retNames[" + i + "] = " + retNames.elementAt(i));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   162
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   163
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   164
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   165
}