8318971: Better Error Handling for Jar Tool When Processing Non-existent Files
Reviewed-by: alanb, jpai
This commit is contained in:
parent
841ab487f8
commit
8ae309ebac
@ -292,6 +292,9 @@ public class Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
expand();
|
expand();
|
||||||
|
if (!ok) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!moduleInfos.isEmpty()) {
|
if (!moduleInfos.isEmpty()) {
|
||||||
// All actual file entries (excl manifest and module-info.class)
|
// All actual file entries (excl manifest and module-info.class)
|
||||||
Set<String> jentries = new HashSet<>();
|
Set<String> jentries = new HashSet<>();
|
||||||
@ -338,6 +341,9 @@ public class Main {
|
|||||||
tmpFile = createTemporaryFile("tmpjar", ".jar");
|
tmpFile = createTemporaryFile("tmpjar", ".jar");
|
||||||
}
|
}
|
||||||
expand();
|
expand();
|
||||||
|
if (!ok) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
try (FileInputStream in = (fname != null) ? new FileInputStream(inputFile)
|
try (FileInputStream in = (fname != null) ? new FileInputStream(inputFile)
|
||||||
: new FileInputStream(FileDescriptor.in);
|
: new FileInputStream(FileDescriptor.in);
|
||||||
FileOutputStream out = new FileOutputStream(tmpFile);
|
FileOutputStream out = new FileOutputStream(tmpFile);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8165944
|
* @bug 8165944 8318971
|
||||||
* @summary test several jar tool input file scenarios with variations on -C
|
* @summary test several jar tool input file scenarios with variations on -C
|
||||||
* options with/without a --release option. Some input files are
|
* options with/without a --release option. Some input files are
|
||||||
* duplicates that sometimes cause exceptions and other times do not,
|
* duplicates that sometimes cause exceptions and other times do not,
|
||||||
@ -153,6 +153,84 @@ public class InputFilesTest {
|
|||||||
jar("cf test.jar --release 9 -C test1 a -C test2 a");
|
jar("cf test.jar --release 9 -C test1 a -C test2 a");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Containing non-existent file in the file list
|
||||||
|
* The final jar should not be created and correct error message should be caught.
|
||||||
|
* IOException is triggered as expected.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testNonExistentFileInput() throws IOException {
|
||||||
|
touch("existingTestFile.txt");
|
||||||
|
onCompletion = () -> rm("existingTestFile.txt");
|
||||||
|
try {
|
||||||
|
jar("cf test.jar existingTestFile.txt nonExistentTestFile.txt");
|
||||||
|
Assert.fail("jar tool unexpectedly completed successfully");
|
||||||
|
} catch (IOException e) {
|
||||||
|
Assert.assertEquals(e.getMessage().trim(), "nonExistentTestFile.txt : no such file or directory");
|
||||||
|
Assert.assertTrue(Files.notExists(Path.of("test.jar")), "Jar file should not be created.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* With @File as a part of jar command line, where the File is containing one or more
|
||||||
|
* non-existent files or directories
|
||||||
|
* The final jar should not be created and correct error message should be caught.
|
||||||
|
* IOException is triggered as expected.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testNonExistentFileInputClassList() throws IOException {
|
||||||
|
touch("existingTestFile.txt");
|
||||||
|
touch("classes.list");
|
||||||
|
Files.writeString(Path.of("classes.list"), """
|
||||||
|
existingTestFile.txt
|
||||||
|
nonExistentTestFile.txt
|
||||||
|
nonExistentDirectory
|
||||||
|
""");
|
||||||
|
onCompletion = () -> rm("existingTestFile.txt classes.list");
|
||||||
|
try {
|
||||||
|
jar("cf test.jar @classes.list");
|
||||||
|
Assert.fail("jar tool unexpectedly completed successfully");
|
||||||
|
} catch (IOException e) {
|
||||||
|
String msg = e.getMessage().trim();
|
||||||
|
Assert.assertTrue(msg.contains("nonExistentTestFile.txt : no such file or directory"));
|
||||||
|
Assert.assertTrue(msg.trim().contains("nonExistentDirectory : no such file or directory"));
|
||||||
|
Assert.assertTrue(Files.notExists(Path.of("test.jar")), "Jar file should not be created.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a jar file; then with @File as a part of jar command line, where the File is containing one or more
|
||||||
|
* non-existent files or directories
|
||||||
|
* The final jar should not be created and correct error message should be caught.
|
||||||
|
* IOException is triggered as expected.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testUpdateNonExistentFileInputClassList() throws IOException {
|
||||||
|
touch("existingTestFileUpdate.txt");
|
||||||
|
touch("existingTestFileUpdate2.txt");
|
||||||
|
touch("classesUpdate.list");
|
||||||
|
Files.writeString(Path.of("classesUpdate.list"), """
|
||||||
|
existingTestFileUpdate2.txt
|
||||||
|
nonExistentTestFileUpdate.txt
|
||||||
|
nonExistentDirectoryUpdate
|
||||||
|
""");
|
||||||
|
onCompletion = () -> rm("existingTestFileUpdate.txt existingTestFileUpdate2.txt " +
|
||||||
|
"classesUpdate.list testUpdate.jar");
|
||||||
|
try {
|
||||||
|
jar("cf testUpdate.jar existingTestFileUpdate.txt");
|
||||||
|
Assert.assertTrue(Files.exists(Path.of("testUpdate.jar")));
|
||||||
|
jar("uf testUpdate.jar @classesUpdate.list");
|
||||||
|
Assert.fail("jar tool unexpectedly completed successfully");
|
||||||
|
} catch (IOException e) {
|
||||||
|
String msg = e.getMessage().trim();
|
||||||
|
Assert.assertFalse(msg.contains("existingTestFileUpdate.txt : no such file or directory"));
|
||||||
|
Assert.assertTrue(msg.contains("nonExistentTestFileUpdate.txt : no such file or directory"));
|
||||||
|
Assert.assertTrue(msg.trim().contains("nonExistentDirectoryUpdate : no such file or directory"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private Stream<Path> mkpath(String... args) {
|
private Stream<Path> mkpath(String... args) {
|
||||||
return Arrays.stream(args).map(d -> Paths.get(".", d.split("/")));
|
return Arrays.stream(args).map(d -> Paths.get(".", d.split("/")));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user