174 try {
175 JImageGenerator.getJLinkTask()
176 .output(imageFile)
177 .addMods("not_zip")
178 .modulePath(helper.defaultModulePath())
179 .call().assertFailure("Error: java.util.zip.ZipException: zip file is empty");
180 } finally {
181 deleteDirectory(jar);
182 }
183 }
184
185 public void testMalformedJmod() throws IOException {
186 Path imageFile = helper.createNewImageDir("test");
187 Path jmod = helper.createNewJmodFile("not_zip");
188 Files.createFile(jmod);
189 try {
190 JImageGenerator.getJLinkTask()
191 .output(imageFile)
192 .addMods("not_zip")
193 .modulePath(helper.defaultModulePath())
194 .call().assertFailure("Error: java.util.zip.ZipException: zip file is empty");
195 } finally {
196 deleteDirectory(jmod);
197 }
198 }
199
200 // Temporarily exclude; the jmod tool can no longer be used to create a jmod
201 // with a class in the unnamed package. Find another way, or remove.
202 // public void testAddDefaultPackage() throws IOException {
203 // String moduleName = "hacked1";
204 // Path module = helper.generateModuleCompiledClasses(helper.getJmodSrcDir(), helper.getJmodClassesDir(),
205 // moduleName, Arrays.asList("hacked1.Main", "A", "B"), "leaf1");
206 // JImageGenerator
207 // .getJModTask()
208 // .addClassPath(module)
209 // .jmod(helper.getJmodDir().resolve(moduleName + ".jmod"))
210 // .create().assertSuccess();
211 // Path image = helper.generateDefaultImage(moduleName).assertSuccess();
212 // helper.checkImage(image, moduleName, null, null);
213 // }
214
219 Files.createFile(module.resolve("top-level-file"));
220 Path jmod = JImageGenerator
221 .getJModTask()
222 .addClassPath(module)
223 .jmod(helper.getJmodDir().resolve(moduleName + ".jmod"))
224 .create().assertSuccess();
225 try {
226 Path image = helper.generateDefaultImage(moduleName).assertSuccess();
227 helper.checkImage(image, moduleName, null, null);
228 } finally {
229 deleteDirectory(jmod);
230 }
231 }
232
233 public void testAddNonStandardSection() throws IOException {
234 String moduleName = "hacked3";
235 Path module = helper.generateDefaultJModule(moduleName).assertSuccess();
236 JImageGenerator.addFiles(module, new InMemoryFile("unknown/A.class", new byte[0]));
237 try {
238 Result result = helper.generateDefaultImage(moduleName);
239 if (result.getExitCode() != 4) {
240 throw new AssertionError("Crash expected");
241 }
242 if (!result.getMessage().contains("java.lang.InternalError: unexpected entry: unknown")) {
243 System.err.println(result.getMessage());
244 throw new AssertionError("InternalError expected");
245 }
246 } finally {
247 deleteDirectory(module);
248 }
249 }
250
251 @Test(enabled = true)
252 public void testSectionsAreFiles() throws IOException {
253 String moduleName = "module";
254 Path jmod = helper.generateDefaultJModule(moduleName).assertSuccess();
255 JImageGenerator.addFiles(jmod,
256 new InMemoryFile("/native", new byte[0]),
257 new InMemoryFile("/conf", new byte[0]),
258 new InMemoryFile("/bin", new byte[0]));
259 try {
260 Result result = helper.generateDefaultImage(moduleName);
261 if (result.getExitCode() != 4) {
262 throw new AssertionError("Crash expected");
263 }
264 if (!result.getMessage().contains("java.lang.InternalError: unexpected entry: ")) {
265 System.err.println(result.getMessage());
266 throw new AssertionError("InternalError expected");
267 }
268 } finally {
269 deleteDirectory(jmod);
270 }
271 }
272
273 public void testDuplicateModule1() throws IOException {
274 String moduleName1 = "dupRes1Jmod1";
275 String moduleName2 = "dupRes1Jmod2";
276 List<String> classNames = Arrays.asList("java.A", "javax.B");
277 Path module1 = helper.generateModuleCompiledClasses(
278 helper.getJmodSrcDir(), helper.getJmodClassesDir(), moduleName1, classNames);
279 Path module2 = helper.generateModuleCompiledClasses(
280 helper.getJmodSrcDir(), helper.getJmodClassesDir(), moduleName2, classNames);
281
282 try (OutputStream out = Files.newOutputStream(module2.resolve("module-info.class"))) {
283 ModuleInfoWriter.write(new ModuleDescriptor.Builder(moduleName1)
284 .requires("java.base").build(), out);
285 }
286
|
174 try {
175 JImageGenerator.getJLinkTask()
176 .output(imageFile)
177 .addMods("not_zip")
178 .modulePath(helper.defaultModulePath())
179 .call().assertFailure("Error: java.util.zip.ZipException: zip file is empty");
180 } finally {
181 deleteDirectory(jar);
182 }
183 }
184
185 public void testMalformedJmod() throws IOException {
186 Path imageFile = helper.createNewImageDir("test");
187 Path jmod = helper.createNewJmodFile("not_zip");
188 Files.createFile(jmod);
189 try {
190 JImageGenerator.getJLinkTask()
191 .output(imageFile)
192 .addMods("not_zip")
193 .modulePath(helper.defaultModulePath())
194 .call().assertFailure("Error: java.io.IOException: Invalid jmod file");
195 } finally {
196 deleteDirectory(jmod);
197 }
198 }
199
200 // Temporarily exclude; the jmod tool can no longer be used to create a jmod
201 // with a class in the unnamed package. Find another way, or remove.
202 // public void testAddDefaultPackage() throws IOException {
203 // String moduleName = "hacked1";
204 // Path module = helper.generateModuleCompiledClasses(helper.getJmodSrcDir(), helper.getJmodClassesDir(),
205 // moduleName, Arrays.asList("hacked1.Main", "A", "B"), "leaf1");
206 // JImageGenerator
207 // .getJModTask()
208 // .addClassPath(module)
209 // .jmod(helper.getJmodDir().resolve(moduleName + ".jmod"))
210 // .create().assertSuccess();
211 // Path image = helper.generateDefaultImage(moduleName).assertSuccess();
212 // helper.checkImage(image, moduleName, null, null);
213 // }
214
219 Files.createFile(module.resolve("top-level-file"));
220 Path jmod = JImageGenerator
221 .getJModTask()
222 .addClassPath(module)
223 .jmod(helper.getJmodDir().resolve(moduleName + ".jmod"))
224 .create().assertSuccess();
225 try {
226 Path image = helper.generateDefaultImage(moduleName).assertSuccess();
227 helper.checkImage(image, moduleName, null, null);
228 } finally {
229 deleteDirectory(jmod);
230 }
231 }
232
233 public void testAddNonStandardSection() throws IOException {
234 String moduleName = "hacked3";
235 Path module = helper.generateDefaultJModule(moduleName).assertSuccess();
236 JImageGenerator.addFiles(module, new InMemoryFile("unknown/A.class", new byte[0]));
237 try {
238 Result result = helper.generateDefaultImage(moduleName);
239 System.err.println(result.getMessage());
240 if (result.getExitCode() == 0) {
241 throw new AssertionError("Crash expected");
242 }
243 } finally {
244 deleteDirectory(module);
245 }
246 }
247
248 @Test(enabled = true)
249 public void testSectionsAreFiles() throws IOException {
250 String moduleName = "hacked4";
251 Path jmod = helper.generateDefaultJModule(moduleName).assertSuccess();
252 JImageGenerator.addFiles(jmod,
253 new InMemoryFile("/native", new byte[0]),
254 new InMemoryFile("/conf", new byte[0]),
255 new InMemoryFile("/bin", new byte[0]));
256 try {
257 Result result = helper.generateDefaultImage(moduleName);
258 System.err.println(result.getMessage());
259 if (result.getExitCode() == 0) {
260 throw new AssertionError("Crash expected");
261 }
262 } finally {
263 deleteDirectory(jmod);
264 }
265 }
266
267 public void testDuplicateModule1() throws IOException {
268 String moduleName1 = "dupRes1Jmod1";
269 String moduleName2 = "dupRes1Jmod2";
270 List<String> classNames = Arrays.asList("java.A", "javax.B");
271 Path module1 = helper.generateModuleCompiledClasses(
272 helper.getJmodSrcDir(), helper.getJmodClassesDir(), moduleName1, classNames);
273 Path module2 = helper.generateModuleCompiledClasses(
274 helper.getJmodSrcDir(), helper.getJmodClassesDir(), moduleName2, classNames);
275
276 try (OutputStream out = Files.newOutputStream(module2.resolve("module-info.class"))) {
277 ModuleInfoWriter.write(new ModuleDescriptor.Builder(moduleName1)
278 .requires("java.base").build(), out);
279 }
280
|