# HG changeset patch # User lancea # Date 1570218677 14400 # Node ID ff45c1bf8129a5092f93119db0b2bfbff8bdf9ad # Parent c6f1226cfb7271cf991d0fd68582ccbc93a63c47 8223771: FileSystemProvider.newFileSystem(Path, Map) should throw IOException when called with a file that cannot be open Reviewed-by: alanb diff -r c6f1226cfb72 -r ff45c1bf8129 src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java --- a/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Fri Oct 04 11:45:16 2019 -0700 +++ b/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Fri Oct 04 15:51:17 2019 -0400 @@ -138,7 +138,7 @@ new END().write(os, 0, forceEnd64); } } else { - throw new FileSystemNotFoundException(zfpath.toString()); + throw new NoSuchFileException(zfpath.toString()); } } // sm and existence check diff -r c6f1226cfb72 -r ff45c1bf8129 test/jdk/jdk/nio/zipfs/NonExistentPathTests.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/jdk/nio/zipfs/NonExistentPathTests.java Fri Oct 04 15:51:17 2019 -0400 @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.FileSystemNotFoundException; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.util.Map; + +import static org.testng.Assert.assertThrows; + +/** + * @test + * @bug 8223771 + * @summary Validate the correct Exception is thrown if the Zip/JAR is not found + * + * @modules jdk.zipfs + * @run testng/othervm NonExistentPathTests + */ +public class NonExistentPathTests { + private static final String ZIPFS_SCHEME = "jar"; + private static final ClassLoader CLASS_LOADER = null; + // Non-exist JAR file to test against + private static final Path INVALID_JAR_FILE = Path.of("jarDoesNotExist.jar"); + // Standard Exception expected from FileSystems.newFileSystem + private static Class testException = IOException.class; + + /** + * Validate that the correct Exception is thrown when specifying a Path + * to a JAR that does not exist and is not being created. + */ + @Test + public void testNewFileSystemWithPath() { + assertThrows(testException, () -> + FileSystems.newFileSystem(INVALID_JAR_FILE)); + assertThrows(testException, () -> + FileSystems.newFileSystem(INVALID_JAR_FILE, Map.of())); + assertThrows(testException, () -> + FileSystems.newFileSystem(INVALID_JAR_FILE, CLASS_LOADER)); + assertThrows(testException, () -> + FileSystems.newFileSystem(INVALID_JAR_FILE, Map.of(), CLASS_LOADER)); + } + + /** + * Validate that the correct Exception is thrown when specifying a URI + * to a JAR that does not exist and is not being created. + */ + @Test + public void testNewFileSystemWithUri() throws Exception { + var jarURI = new URI(ZIPFS_SCHEME, + INVALID_JAR_FILE.toUri().toString(), null); + + assertThrows(testException, () -> + FileSystems.newFileSystem(jarURI, Map.of())); + + assertThrows(testException, () -> + FileSystems.newFileSystem(jarURI, Map.of(), CLASS_LOADER)); + } +}