test/java/nio/file/Files/TemporaryFiles.java
Print this page
@@ -20,79 +20,152 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
- * @bug 4313887 6838333
- * @summary Unit test for File.createTemporaryXXX (to be be moved to test/java/io/File)
+ * @bug 4313887 6838333 7006126
+ * @summary Unit test for Files.createTempXXX
* @library ..
*/
import java.nio.file.*;
import static java.nio.file.StandardOpenOption.*;
import java.nio.file.attribute.*;
-import java.io.File;
import java.io.IOException;
import java.util.Set;
public class TemporaryFiles {
- static void checkInTempDirectory(Path file) {
- Path tmpdir = Paths.get(System.getProperty("java.io.tmpdir"));
- if (!file.getParent().equals(tmpdir))
- throw new RuntimeException("Not in temporary directory");
+ static void checkInDirectory(Path file, Path dir) {
+ if (dir == null)
+ dir = Paths.get(System.getProperty("java.io.tmpdir"));
+ if (!file.getParent().equals(dir))
+ throw new RuntimeException("Not in expected directory");
}
- static void checkFile(Path file) throws IOException {
- // check file is in temporary directory
- checkInTempDirectory(file);
+ static void testTempFile(String prefix, String suffix, Path dir)
+ throws IOException
+ {
+ Path file = (dir == null) ?
+ Files.createTempFile(prefix, suffix) :
+ Files.createTempFile(dir, prefix, suffix);
+ try {
+ // check file name
+ String name = file.getFileName().toString();
+ if (prefix != null && !name.startsWith(prefix))
+ throw new RuntimeException("Should start with " + prefix);
+ if (suffix == null && !name.endsWith(".tmp"))
+ throw new RuntimeException("Should end with .tmp");
+ if (suffix != null && !name.endsWith(suffix))
+ throw new RuntimeException("Should end with " + suffix);
+ // check file is in expected directory
+ checkInDirectory(file, dir);
+
// check that file can be opened for reading and writing
- file.newByteChannel(READ).close();
- file.newByteChannel(WRITE).close();
- file.newByteChannel(READ,WRITE).close();
+ Files.newByteChannel(file, READ).close();
+ Files.newByteChannel(file, WRITE).close();
+ Files.newByteChannel(file, READ,WRITE).close();
// check file permissions are 0600 or more secure
- if (file.getFileStore().supportsFileAttributeView("posix")) {
- Set<PosixFilePermission> perms = Attributes
- .readPosixFileAttributes(file).permissions();
+ if (Files.getFileStore(file).supportsFileAttributeView("posix")) {
+ Set<PosixFilePermission> perms = Files.getPosixFilePermissions(file);
perms.remove(PosixFilePermission.OWNER_READ);
perms.remove(PosixFilePermission.OWNER_WRITE);
if (!perms.isEmpty())
throw new RuntimeException("Temporary file is not secure");
}
+ } finally {
+ Files.delete(file);
}
+ }
- static void checkDirectory(Path dir) throws IOException {
- // check directory is in temporary directory
- checkInTempDirectory(dir);
+ static void testTempFile(String prefix, String suffix)
+ throws IOException
+ {
+ testTempFile(prefix, suffix, null);
+ }
+ static void testTempDirectory(String prefix, Path dir) throws IOException {
+ Path subdir = (dir == null) ?
+ Files.createTempDirectory(prefix) :
+ Files.createTempDirectory(dir, prefix);
+ try {
+ // check file name
+ String name = subdir.getFileName().toString();
+ if (prefix != null && !name.startsWith(prefix))
+ throw new RuntimeException("Should start with " + prefix);
+
+ // check directory is in expected directory
+ checkInDirectory(subdir, dir);
+
// check directory is empty
- DirectoryStream<Path> stream = dir.newDirectoryStream();
+ DirectoryStream<Path> stream = Files.newDirectoryStream(subdir);
try {
if (stream.iterator().hasNext())
throw new RuntimeException("Tempory directory not empty");
} finally {
stream.close();
}
+ // check that we can create file in directory
+ Path file = Files.createFile(subdir.resolve("foo"));
+ try {
+ Files.newByteChannel(file, READ,WRITE).close();
+ } finally {
+ Files.delete(file);
+ }
+
// check file permissions are 0700 or more secure
- if (dir.getFileStore().supportsFileAttributeView("posix")) {
- Set<PosixFilePermission> perms = Attributes
- .readPosixFileAttributes(dir).permissions();
+ if (Files.getFileStore(subdir).supportsFileAttributeView("posix")) {
+ Set<PosixFilePermission> perms = Files.getPosixFilePermissions(subdir);
perms.remove(PosixFilePermission.OWNER_READ);
perms.remove(PosixFilePermission.OWNER_WRITE);
perms.remove(PosixFilePermission.OWNER_EXECUTE);
if (!perms.isEmpty())
throw new RuntimeException("Temporary directory is not secure");
}
+ } finally {
+ Files.delete(subdir);
}
+ }
+ static void testTempDirectory(String prefix) throws IOException {
+ testTempDirectory(prefix, null);
+ }
+
+ static void testInvalidFileTemp(String prefix, String suffix) throws IOException {
+ try {
+ Path file = Files.createTempFile(prefix, suffix);
+ Files.delete(file);
+ throw new RuntimeException("IllegalArgumentException expected");
+ } catch (IllegalArgumentException expected) { }
+ }
+
public static void main(String[] args) throws IOException {
- Path file = File.createTemporaryFile("blah", null).toPath();
+ // temporary-file directory
+ testTempFile("blah", ".dat");
+ testTempFile("blah", null);
+ testTempFile(null, ".dat");
+ testTempFile(null, null);
+ testTempDirectory("blah");
+ testTempDirectory(null);
+
+ // a given directory
+ Path dir = Files.createTempDirectory("tmpdir");
try {
- checkFile(file);
+ testTempFile("blah", ".dat", dir);
+ testTempFile("blah", null, dir);
+ testTempFile(null, ".dat", dir);
+ testTempFile(null, null, dir);
+ testTempDirectory("blah", dir);
+ testTempDirectory(null, dir);
} finally {
- TestUtil.deleteUnchecked(file);
+ Files.delete(dir);
}
+
+ // invalid prefix and suffix
+ testInvalidFileTemp("../blah", null);
+ testInvalidFileTemp("dir/blah", null);
+ testInvalidFileTemp("blah", ".dat/foo");
}
}