Index: ChangeLog =================================================================== RCS file: /cvs/mauve/mauve/ChangeLog,v retrieving revision 1.1714 diff -u -r1.1714 ChangeLog --- ChangeLog 21 Jun 2006 08:13:03 -0000 1.1714 +++ ChangeLog 21 Jun 2006 09:59:27 -0000 @@ -1,3 +1,7 @@ + 2006-06-21 Gary Benson + + * gnu/testlet/java/lang/reflect/AccessibleObject/security.java: New test. + 2006-06-21 Gary Benson * gnu/testlet/java/awt/Graphics2D/security.java: New test. Index: gnu/testlet/java/lang/reflect/AccessibleObject/security.java =================================================================== RCS file: gnu/testlet/java/lang/reflect/AccessibleObject/security.java diff -N gnu/testlet/java/lang/reflect/AccessibleObject/security.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gnu/testlet/java/lang/reflect/AccessibleObject/security.java 21 Jun 2006 09:59:27 -0000 @@ -0,0 +1,136 @@ +// Copyright (C) 2006 Red Hat, Inc. +// Written by Gary Benson + +// This file is part of Mauve. + +// Mauve is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// Mauve 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 for more details. + +// You should have received a copy of the GNU General Public License +// along with Mauve; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. + +package gnu.testlet.java.lang.reflect.AccessibleObject; + +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ReflectPermission; +import java.security.Permission; + +import gnu.testlet.Testlet; +import gnu.testlet.TestHarness; +import gnu.testlet.TestSecurityManager2; + +public class security implements Testlet +{ + public void test(TestHarness harness) + { + try { + harness.checkPoint("constructor"); + Constructor constructor = + ClassLoader.class.getDeclaredConstructor(new Class[0]); + int mods = constructor.getModifiers(); + harness.check(Modifier.isPrivate(mods) || Modifier.isProtected(mods)); + try { + constructor.newInstance(new Object[0]); + harness.check(false); + } + catch (IllegalAccessException ex) { + harness.check(true); + } + + harness.checkPoint("field"); + Field field = String.class.getDeclaredField("serialVersionUID"); + mods = field.getModifiers(); + harness.check(Modifier.isPrivate(mods) || Modifier.isProtected(mods)); + try { + field.get(""); + harness.check(false); + } + catch (IllegalAccessException ex) { + harness.check(true); + } + + harness.checkPoint("method"); + Method method = + ClassLoader.class.getDeclaredMethod("getPackages", new Class[0]); + mods = method.getModifiers(); + harness.check(Modifier.isPrivate(mods) || Modifier.isProtected(mods)); + try { + method.invoke(getClass().getClassLoader(), new Object[0]); + harness.check(false); + } + catch (IllegalAccessException ex) { + harness.check(true); + } + + AccessibleObject[] objects = + new AccessibleObject[] {constructor, field, method}; + + AccessibleObject class_constructor = + Class.class.getDeclaredConstructors()[0]; + + Permission[] suppressAccessChecks = new Permission[] { + new ReflectPermission("suppressAccessChecks")}; + + TestSecurityManager2 sm = new TestSecurityManager2(harness); + try { + sm.install(); + + // throwpoint: java.lang.reflect.AccessibleObject-setAccessible(boolean) + harness.checkPoint("setAccessible (per-object)"); + for (int i = 0; i < objects.length; i++) { + try { + sm.prepareChecks(suppressAccessChecks); + objects[i].setAccessible(true); + sm.checkAllChecked(harness); + } + catch (SecurityException ex) { + harness.debug(ex); + harness.check(false, "unexpected check"); + } + } + + harness.checkPoint("setAccessible (class constructor)"); + try { + sm.prepareChecks(suppressAccessChecks); + class_constructor.setAccessible(true); + harness.check(false); + } + catch (SecurityException ex) { + sm.checkAllChecked(harness); + } + + // throwpoint: java.lang.reflect.AccessibleObject-setAccessible(AccessibleObject[], boolean) + harness.checkPoint("setAccessible (array)"); + try { + sm.prepareChecks(suppressAccessChecks); + AccessibleObject.setAccessible(objects, true); + sm.checkAllChecked(harness); + } + catch (SecurityException ex) { + harness.debug(ex); + harness.check(false, "unexpected check"); + } + } + finally { + sm.uninstall(); + } + } + catch (Throwable ex) { + harness.debug(ex); + harness.check(false, "Unexpected exception"); + } + } +}