/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8017174 8010727
* @summary NPE when using Logger.getAnonymousLogger or
* LogManager.getLogManager().getLogger
*
*/
// NOTE: We run in other VM in order to 1. switch security manager and 2. cause
// LogManager class to be loaded anew.
public class TestAppletLoggerContext {
// Avoids the hassle of dealing with files and system props...
perms = new Permissions();
}
}
return perms;
}
return perms;
}
}
}
// The bridge class initializes the logging system.
// It stubs the applet context in order to simulate context changes.
//
public static class Bridge {
boolean active = true;
private static class TestExc {
}
}
public boolean isDisposed() { return false; }
}
public static void init() {
new RuntimePermission("setContextClassLoader"),
new RuntimePermission("shutdownHooks"));
}
}
public static void changeContext() {
javaAwtAccess.active = true;
}
public static void desactivate() {
javaAwtAccess.active = false;
}
public CustomAnonymousLogger() {
this("");
}
}
}
}
}
}
public static enum TestCase {
public void test() {
switch(this) {
// When run - each of these two tests must be
// run before any other tests and before each other.
case LoadingApplet: testLoadingApplet(); break;
case LoadingMain: testLoadingMain(); break;
}
}
switch(this) {
case LoadingApplet:
return "Test that when the LogManager class is"
+ " loaded in an applet thread first,"
+ "\n all LoggerContexts are correctly initialized";
case LoadingMain:
return "Test that when the LogManager class is"
+ " loaded in the main thread first,"
+ "\n all LoggerContexts are correctly initialized";
case One:
return "Test that Logger.getAnonymousLogger()"
+ " and new CustomAnonymousLogger() don't throw NPE";
case Two:
return "Test that Logger.getLogger(\"\")"
+ " does not return null nor throws NPE";
case Three:
return "Test that LogManager.getLogManager().getLogger(\"\")"
+ " does not return null nor throws NPE";
case Four:
return "Test that Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)"
+ " does not return null,\n and that"
+ " new CustomAnonymousLogger(Logger.GLOBAL_LOGGER_NAME)"
+ " does not throw NPE";
case Five:
return "Test that LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME)"
+ "\n does not return null nor throws NPE";
case Six:
return "Test that manager.getLogger(Logger.GLOBAL_LOGGER_NAME)"
+ " returns null\n when manager is not the default"
+ " LogManager instance.\n"
+ "Test adding a new logger named \"global\" in that"
+ " non default instance.";
case Seven: return "Test that manager.getLogger(\"\")"
+ " returns null\n when manager is not the default"
+ " LogManager instance.\n"
+ "Test adding a new logger named \"\" in that"
+ " non default instance.";
default: return "Undefined";
}
}
};
/**
* @param args the command line arguments
*/
}
}
int testrun = 0;
if (testrun > 0) {
throw new UnsupportedOperationException("Test case "
+ test + " must be executed first!");
}
}
try {
} catch (Exception x) {
} finally {
testrun++;
}
}
}
public static void testLoadingApplet() {
}
public static void testLoadingMain() {
}
public static void testOne() {
for (int i=0; i<3 ; i++) {
}
}
public static void testTwo() {
for (int i=0; i<3 ; i++) {
}
}
public static void testThree() {
for (int i=0; i<3 ; i++) {
}
}
public static void testFour() {
for (int i=0; i<3 ; i++) {
}
}
public static void testFive() {
for (int i=0; i<3 ; i++) {
}
}
/**
* This test is designed to test the behavior of additional LogManager instances.
* It must be noted that if the security manager is off, then calling
* Bridge.changeContext() has actually no effect - which explains why we have
* some differences between the cases security manager on & security manager
* off.
**/
public static void testSix() {
for (int i=0; i<3 ; i++) {
// this is not a supported configuration:
// We are in an applet context with several log managers.
// We however need to check our assumptions...
// Applet context => root logger and global logger are not null.
// root == LogManager.getLogManager().rootLogger
// global == Logger.global
: global);
// the LogManager's custom global logger added above...
// the LogManager's custom global logger added above...
// we will always get back the global logger.
// this could be considered as a bug...
: null);
}
}
/**
* This test is designed to test the behavior of additional LogManager instances.
* It must be noted that if the security manager is off, then calling
* Bridge.changeContext() has actually no effect - which explains why we have
* some differences between the cases security manager on & security manager
* off.
**/
public static void testSeven() {
for (int i=0; i<3 ; i++) {
// this is not a supported configuration:
// We are in an applet context with several log managers.
// We haowever need to check our assumptions...
// Applet context => root logger and global logger are not null.
// root == LogManager.getLogManager().rootLogger
// global == Logger.global
: root);
}
// we will always get back the global logger.
// this could be considered as a bug...
: global);
// we will always get back the default manager's root logger.
// this could be considered as a bug...
}
}
l = l.getParent();
}
}
super(msg);
}
}
}
}
}
}
}
}
}