Path: blob/master/test/jdk/java/nio/file/WatchService/WithSecurityManager.java
41153 views
/*1* Copyright (c) 2008, 2016, 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/* @test24* @bug 431388725* @summary Unit test for Watchable#register's permission checks26* @modules jdk.unsupported27* @build WithSecurityManager28* @run main/othervm -Djava.security.manager=allow WithSecurityManager denyAll.policy - fail29* @run main/othervm -Djava.security.manager=allow WithSecurityManager denyAll.policy tree fail30* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirOnly.policy - pass31* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirOnly.policy tree fail32* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirAndOneLevel.policy - pass33* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirAndOneLevel.policy tree fail34* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirAndTree.policy - pass35* @run main/othervm -Djava.security.manager=allow WithSecurityManager grantDirAndTree.policy tree pass36*/3738import java.nio.file.*;39import java.io.IOException;40import com.sun.nio.file.ExtendedWatchEventModifier;4142public class WithSecurityManager {4344public static void main(String[] args) throws IOException {45String policyFile = args[0];46boolean recursive = args[1].equals("tree");47boolean expectedToFail = args[2].equals("fail");4849// install security manager with the given policy file50String testSrc = System.getProperty("test.src");51if (testSrc == null)52throw new RuntimeException("This test must be run by jtreg");53Path dir = Paths.get(testSrc);54System.setProperty("java.security.policy", dir.resolve(policyFile).toString());55System.setSecurityManager(new SecurityManager());5657// initialize optional modifier58WatchEvent.Modifier[] modifiers;59if (recursive) {60modifiers = new WatchEvent.Modifier[1];61modifiers[0] = ExtendedWatchEventModifier.FILE_TREE;62} else {63modifiers = new WatchEvent.Modifier[0];64}6566// attempt to register directory67try {68dir.register(dir.getFileSystem().newWatchService(),69new WatchEvent.Kind<?>[]{ StandardWatchEventKinds.ENTRY_CREATE },70modifiers);71if (expectedToFail)72throw new RuntimeException("SecurityException not thrown");73} catch (SecurityException e) {74if (!expectedToFail)75throw e;76} catch (UnsupportedOperationException e) {77// FILE_TREE modifier only supported on some platforms78if (!recursive)79throw new RuntimeException(e);80System.out.println("FILE_TREE option not supported");81}82}83}848586