Path: blob/master/test/jdk/java/security/PermissionCollection/Concurrent.java
41149 views
/*1* Copyright (c) 2003, 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*/2223/*24* @test25* @bug 467159826* @summary PermissionCollection is not properly synchronized27*/2829import java.security.*; // AllPermission, BasicPermission, Permissions30import java.net.NetPermission;31import java.net.SocketPermission;32import java.io.FilePermission;33import java.util.PropertyPermission;34import javax.security.auth.AuthPermission;35import javax.security.auth.kerberos.DelegationPermission;36import javax.security.auth.kerberos.ServicePermission;37import javax.management.MBeanServerPermission;3839import java.util.*;4041public class Concurrent {42private static final int LIMIT1 = 2000;43private static final int LIMIT2 = 1000;44private static final boolean debug = false;45private static final Map errors =46Collections.synchronizedMap(new HashMap());4748public static void main(String args[]) throws Exception {49testPc(allp);50testPc(filep);51testPc(sockp);52testPc(propp);53testPc(basicp);54testPc(delegatep);55testPc(servicep);56testPc(mbeanp);57testPc(unresp);5859testPerms();6061if (errors.size() > 0) {62if (true) {63Iterator iter = errors.entrySet().iterator();64while (iter.hasNext()) {65System.out.println(iter.next());66}67};68throw (Exception) new Exception("Got errors");69}70}7172private static void testPc (final Permission[] perm) throws Exception {7374final PermissionCollection pc = perm[0].newPermissionCollection();7576new Thread() {77{78setDaemon(true);79start();80}81public void run() {82try {83for (int i = 0; i < LIMIT1; i++) {84for (int j = 0; j < perm.length; j++) {85pc.add(perm[j]);86if (debug) {87System.out.println("added " + perm[j]);88}89}90}91} catch (Exception e) {92errors.put(perm[0].getClass().getName(), e);93}94}95};96try {97for (int i = 0; i < LIMIT2; i++) {98boolean result = pc.implies(perm[perm.length-1]);99if (debug) {100System.out.println(perm[perm.length-1] + " implies " + result);101}102103Enumeration en = pc.elements();104while (en.hasMoreElements()) {105Object obj = en.nextElement();106if (debug) {107System.out.println(obj);108}109}110}111} catch (Exception e) {112errors.put(perm[0].getClass().getName(), e);113}114}115116private static void testPerms () throws Exception {117118final Permissions pc = new Permissions();119120new Thread() {121{122setDaemon(true);123start();124}125public void run() {126try {127for (int i = 0; i < LIMIT1; i++) {128for (int j = 0; j < permlist.length; j++) {129for (int k = 0; k < permlist[j].length; k++) {130pc.add(permlist[j][k]);131}132}133}134} catch (Exception e) {135errors.put("java.security.Permissions", e);136}137}138};139try {140for (int i = 0; i < LIMIT2; i++) {141for (int j = 0; j < permlist.length; j++) {142boolean result = pc.implies(permlist[j][0]);143if (debug) {144System.out.println(permlist[j][0] + " implies " + result);145}146}147148Enumeration en = pc.elements();149while (en.hasMoreElements()) {150Object obj = en.nextElement();151if (debug) {152System.out.println(obj);153}154}155}156} catch (Exception e) {157errors.put("java.security.Permissions", e);158}159}160161private static final Permission[] allp = new Permission[]{162new AllPermission(), new AllPermission()};163164private static final Permission[] filep = new Permission[]{165new FilePermission("/tmp/foobar", "read"),166new FilePermission("/tmp/foo", "write"),167new FilePermission("/tmp/foobar", "read,write"),168};169170private static final Permission[] sockp = new Permission[]{171new SocketPermission("example.net", "connect"),172new SocketPermission("www.sun.com", "resolve"),173new SocketPermission("www.test1.com", "accept"),174new SocketPermission("www.test3.com", "resolve,connect"),175new SocketPermission("www.test4.com", "listen"),176};177178private static final Permission[] propp = new Permission[]{179new PropertyPermission("user.home", "read"),180new PropertyPermission("java.home", "write"),181new PropertyPermission("test.home", "write"),182new PropertyPermission("test1.home", "read"),183new PropertyPermission("test2.home", "read"),184};185186private static final Permission[] basicp = new Permission[] {187new NetPermission("setDefaultAuthenticator"),188new NetPermission("requestPasswordAuthentication"),189new NetPermission("specifyStreamHandler")190};191192private static final Permission[] delegatep = new Permission[] {193new DelegationPermission(194"\"host/[email protected]\" \"cn=John,o=imc,c=us\""),195new DelegationPermission(196"\"user/[email protected]\" \"cn=John,o=imc,c=us\""),197new DelegationPermission(198"\"host/[email protected]\" \"cn=John,o=imc,c=us\"")199};200201private static final Permission[] servicep = new Permission[]{202new ServicePermission("krbtgt/[email protected]", "initiate"),203new ServicePermission("ldap/[email protected]", "initiate"),204new ServicePermission("imap/[email protected]", "accept"),205new ServicePermission("acap/[email protected]", "initiate"),206new ServicePermission("host/[email protected]", "initiate"),207};208209private static final Permission[] mbeanp = new Permission[] {210new MBeanServerPermission("createMBeanServer"),211new MBeanServerPermission("findMBeanServer"),212new MBeanServerPermission("newMBeanServer"),213new MBeanServerPermission("releaseMBeanServer"),214};215216private static final Permission[] unresp = new Permission[] {217new UnresolvedPermission("com.unknown.TestClass", "UnknownPermission",218"read,write", null),219new UnresolvedPermission("com.unknown.TestClass", "APermission",220"read,write", null),221new UnresolvedPermission("com.unknown.TestClass", "BPermission",222"read,write", null),223new UnresolvedPermission("com.unknown.CClass", "CPermission",224"read,write", null),225new UnresolvedPermission("com.unknown.DClass", "DUnknownPermission",226"read,write", null),227new UnresolvedPermission("com.unknown.EClass", "EUnknownPermission",228"read,write", null),229};230231private static final Permission[][] permlist = new Permission[][]{232allp, filep, sockp, propp, basicp, delegatep, servicep, mbeanp, unresp};233}234235236