Path: blob/master/test/jdk/java/sql/testng/util/TestPolicy.java
41152 views
/*1* Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/22package util;2324import java.io.FilePermission;25import java.lang.reflect.ReflectPermission;26import java.security.AllPermission;27import java.security.CodeSource;28import java.security.Permission;29import java.security.PermissionCollection;30import java.security.Permissions;31import java.security.Policy;32import java.security.ProtectionDomain;33import java.security.SecurityPermission;34import java.sql.SQLPermission;35import java.util.Enumeration;36import java.util.PropertyPermission;37import java.util.StringJoiner;38import java.util.logging.LoggingPermission;3940/*41* Simple Policy class that supports the required Permissions to validate the42* JDBC concrete classes43*/44public class TestPolicy extends Policy {45static final Policy DEFAULT_POLICY = Policy.getPolicy();4647final PermissionCollection permissions = new Permissions();4849/**50* Constructor which sets the minimum permissions allowing testNG to work51* with a SecurityManager52*/53public TestPolicy() {54setMinimalPermissions();55}5657/*58* Constructor which determines which permissions are defined for this59* Policy used by the JDBC tests Possible values are: all (ALLPermissions),60* setLog (SQLPemission("setLog"), deregisterDriver61* (SQLPermission("deregisterDriver") (SQLPermission("deregisterDriver"),62* setSyncFactory(SQLPermission(setSyncFactory), and also63* LoggerPermission("control", null) when setting a Level64*65* @param policy Permissions to set66*/67public TestPolicy(String policy) {6869switch (policy) {70case "all":71permissions.add(new AllPermission());72break;73case "setLog":74setMinimalPermissions();75permissions.add(new SQLPermission("setLog"));76break;77case "deregisterDriver":78setMinimalPermissions();79permissions.add(new SQLPermission("deregisterDriver"));80break;81case "setSyncFactory":82setMinimalPermissions();83permissions.add(new SQLPermission("setSyncFactory"));84break;85case "setSyncFactoryLogger":86setMinimalPermissions();87permissions.add(new SQLPermission("setSyncFactory"));88permissions.add(new LoggingPermission("control", null));89break;90default:91setMinimalPermissions();92}93}9495/*96* Defines the minimal permissions required by testNG when running these97* tests98*/99private void setMinimalPermissions() {100permissions.add(new SecurityPermission("getPolicy"));101permissions.add(new SecurityPermission("setPolicy"));102permissions.add(new RuntimePermission("getClassLoader"));103permissions.add(new RuntimePermission("setSecurityManager"));104permissions.add(new RuntimePermission("createSecurityManager"));105permissions.add(new PropertyPermission("line.separator", "read"));106permissions.add(new PropertyPermission("fileStringBuffer", "read"));107permissions.add(new PropertyPermission("dataproviderthreadcount", "read"));108permissions.add(new PropertyPermission("java.io.tmpdir", "read"));109permissions.add(new PropertyPermission("testng.show.stack.frames",110"read"));111permissions.add(new PropertyPermission("testng.thread.affinity", "read"));112permissions.add(new PropertyPermission("testng.memory.friendly", "read"));113permissions.add(new PropertyPermission("testng.mode.dryrun", "read"));114permissions.add(new PropertyPermission("testng.report.xml.name", "read"));115permissions.add(new PropertyPermission("testng.timezone", "read"));116permissions.add(new ReflectPermission("suppressAccessChecks"));117permissions.add(new FilePermission("<<ALL FILES>>",118"read, write, delete"));119}120121/*122* Overloaded methods from the Policy class123*/124@Override125public String toString() {126StringJoiner sj = new StringJoiner("\n", "policy: ", "");127Enumeration<Permission> perms = permissions.elements();128while (perms.hasMoreElements()) {129sj.add(perms.nextElement().toString());130}131return sj.toString();132133}134135@Override136public PermissionCollection getPermissions(ProtectionDomain domain) {137return permissions;138}139140@Override141public PermissionCollection getPermissions(CodeSource codesource) {142return permissions;143}144145@Override146public boolean implies(ProtectionDomain domain, Permission perm) {147return permissions.implies(perm) || DEFAULT_POLICY.implies(domain, perm);148}149}150151152