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