1 /* 2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /** 25 * @test 26 * @library /lib/testlibrary 27 * @modules java.desktop java.compact1 jdk.compiler 28 * @build LimitModsTest CompilerUtils jdk.testlibrary.* 29 * @run testng LimitModsTest 30 * @summary Basic tests for java -limitmods 31 */ 32 33 import java.nio.file.Path; 34 import java.nio.file.Paths; 35 36 import static jdk.testlibrary.ProcessTools.*; 37 38 import org.testng.annotations.BeforeTest; 39 import org.testng.annotations.Test; 40 import static org.testng.Assert.*; 41 42 43 @Test 44 public class LimitModsTest { 45 46 private static final String TEST_SRC = System.getProperty("test.src"); 47 48 private static final Path SRC_DIR = Paths.get(TEST_SRC, "src"); 49 private static final Path MODS_DIR = Paths.get("mods"); 50 51 // the module name / main class of the test module 52 private static final String TEST_MODULE = "test"; 53 private static final String MAIN_CLASS = "jdk.test.UseAWT"; 54 55 56 @BeforeTest 57 public void compileTestModule() throws Exception { 58 59 // javac -d mods/$TESTMODULE src/$TESTMODULE/** 60 boolean compiled 61 = CompilerUtils.compile(SRC_DIR.resolve(TEST_MODULE), 62 MODS_DIR.resolve(TEST_MODULE)); 63 64 assertTrue(compiled, "test module did not compile"); 65 } 66 67 68 /** 69 * Basic test of -limitmods to limit which platform modules are observable. 70 */ 71 public void testLimitingPlatformModules() throws Exception { 72 int exitValue; 73 74 // java -limitmods java.base -listmods 75 exitValue = executeTestJava("-limitmods", "java.base", "-listmods") 76 .outputTo(System.out) 77 .errorTo(System.out) 78 .shouldContain("java.base") 79 .shouldNotContain("java.logging") 80 .shouldNotContain("java.xml") 81 .getExitValue(); 82 83 assertTrue(exitValue == 0); 84 85 86 // java -limitmods java.compact1 -listmods 87 exitValue = executeTestJava("-limitmods", "java.compact1", "-listmods") 88 .outputTo(System.out) 89 .errorTo(System.out) 90 .shouldContain("java.base") 91 .shouldContain("java.logging") 92 .shouldContain("java.compact1") 93 .shouldNotContain("java.xml") 94 .getExitValue(); 95 96 assertTrue(exitValue == 0); 97 } 98 99 100 /** 101 * Test -limitmods with -addmods 102 */ 103 public void testWithAddMods() throws Exception { 104 int exitValue; 105 106 // java -limitmods java.base -addmods java.logging -listmods 107 exitValue = executeTestJava("-limitmods", "java.base", 108 "-addmods", "java.logging", 109 "-listmods") 110 .outputTo(System.out) 111 .errorTo(System.out) 112 .shouldContain("java.base") 113 .shouldContain("java.logging") 114 .shouldNotContain("java.xml") 115 .getExitValue(); 116 117 assertTrue(exitValue == 0); 118 119 120 // java -limitmods java.base -addmods java.sql -listmods 121 // This should fail because java.sql has dependences beyond java.base 122 exitValue = executeTestJava("-limitmods", "java.base", 123 "-addmods", "java.sql", 124 "-listmods") 125 .outputTo(System.out) 126 .errorTo(System.out) 127 .getExitValue(); 128 129 assertTrue(exitValue != 0); 130 } 131 132 133 /** 134 * Run class path application with -limitmods 135 */ 136 public void testUnnamedModule() throws Exception { 137 String classpath = MODS_DIR.resolve(TEST_MODULE).toString(); 138 139 // java -limitmods java.base -cp mods/$TESTMODULE ... 140 int exitValue1 141 = executeTestJava("-limitmods", "java.base", 142 "-cp", classpath, 143 MAIN_CLASS) 144 .outputTo(System.out) 145 .errorTo(System.out) 146 .shouldContain("NoClassDefFoundError") 147 .getExitValue(); 148 149 assertTrue(exitValue1 != 0); 150 151 152 // java -limitmods java.base -cp mods/$TESTMODULE ... 153 int exitValue2 154 = executeTestJava("-limitmods", "java.desktop", 155 "-cp", classpath, 156 MAIN_CLASS) 157 .outputTo(System.out) 158 .errorTo(System.out) 159 .getExitValue(); 160 161 assertTrue(exitValue2 == 0); 162 } 163 164 165 /** 166 * Run named module with -limitmods 167 */ 168 public void testNamedModule() throws Exception { 169 170 String modulepath = MODS_DIR.toString(); 171 String mid = TEST_MODULE + "/" + MAIN_CLASS; 172 173 // java -limitmods java.base -mp mods -m $TESTMODULE/$MAINCLASS 174 int exitValue = executeTestJava("-limitmods", "java.base", 175 "-mp", modulepath, 176 "-m", mid) 177 .outputTo(System.out) 178 .errorTo(System.out) 179 .getExitValue(); 180 181 assertTrue(exitValue != 0); 182 183 // java -limitmods java.desktop -mp mods -m $TESTMODULE/$MAINCLASS 184 exitValue = executeTestJava("-limitmods", "java.desktop", 185 "-mp", modulepath, 186 "-m", mid) 187 .outputTo(System.out) 188 .errorTo(System.out) 189 .getExitValue(); 190 191 assertTrue(exitValue == 0); 192 } 193 194 }