< prev index next >

test/java/nio/file/Files/DeleteOnClose.java

Print this page


   1 /*
   2  * Copyright (c) 2008, 2011, 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 import java.nio.file.*;
  25 import static java.nio.file.StandardOpenOption.*;
  26 import java.io.*;
  27 import java.util.*;




















  28 
  29 public class DeleteOnClose {
  30 
  31     public static void main(String[] args) throws IOException {
  32         // open file but do not close it. Its existance will be checked by
  33         // the calling script.
  34         Files.newByteChannel(Paths.get(args[0]), READ, WRITE, DELETE_ON_CLOSE);





  35 
  36         // check temporary file has been deleted after closing it
  37         Path file = Files.createTempFile("blah", "tmp");
  38         Files.newByteChannel(file, READ, WRITE, DELETE_ON_CLOSE).close();
  39         if (Files.exists(file))
  40             throw new RuntimeException("Temporary file was not deleted");
  41 
  42         Path dir = Files.createTempDirectory("blah");
  43         try {
  44             // check that DELETE_ON_CLOSE fails when file is a sym link
  45             if (TestUtil.supportsLinks(dir)) {
  46                 file = dir.resolve("foo");
  47                 Files.createFile(file);
  48                 Path link = dir.resolve("link");
  49                 Files.createSymbolicLink(link, file);
  50                 try {
  51                     Files.newByteChannel(link, READ, WRITE, DELETE_ON_CLOSE);
  52                     throw new RuntimeException("IOException expected");
  53                 } catch (IOException ignore) { }
  54             }
  55 
  56             // check that DELETE_ON_CLOSE works with files created via open
  57             // directories
   1 /*
   2  * Copyright (c) 2008, 2017, 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  * @bug 4313887
  27  * @summary Unit test for DELETE_ON_CLOSE open option
  28  * @library /test/lib /java/nio/file
  29  * @build DeleteOnTerminate
  30  * @run main DeleteOnClose
  31  */
  32 
  33 import java.io.IOException;
  34 import java.nio.file.DirectoryStream;
  35 import java.nio.file.Files;
  36 import java.nio.file.OpenOption;
  37 import java.nio.file.Path;
  38 import java.nio.file.Paths;
  39 import java.nio.file.SecureDirectoryStream;
  40 import java.util.HashSet;
  41 import java.util.Set;
  42 
  43 import jdk.test.lib.process.ProcessTools;
  44 
  45 import static java.nio.file.StandardOpenOption.READ;
  46 import static java.nio.file.StandardOpenOption.WRITE;
  47 import static java.nio.file.StandardOpenOption.DELETE_ON_CLOSE;
  48 
  49 public class DeleteOnClose {
  50 
  51     public static void main(String[] args) throws Exception {
  52         // open file with DELETE_ON_CLOSE but do not close it, check delete-on-exit
  53         Path file = Files.createTempFile("blah", "tmp");
  54         ProcessTools.executeTestJava(DeleteOnTerminate.class.getName(),
  55                                      file.toAbsolutePath().toString())
  56                     .shouldHaveExitValue(0);
  57         if (Files.exists(file)) {
  58             throw new RuntimeException("Temporary file was not deleted");
  59         }
  60 
  61         // check temporary file has been deleted after closing it
  62         file = Files.createTempFile("blep", "tmp");
  63         Files.newByteChannel(file, READ, WRITE, DELETE_ON_CLOSE).close();
  64         if (Files.exists(file))
  65             throw new RuntimeException("Temporary file was not deleted");
  66 
  67         Path dir = Files.createTempDirectory("blah");
  68         try {
  69             // check that DELETE_ON_CLOSE fails when file is a sym link
  70             if (TestUtil.supportsLinks(dir)) {
  71                 file = dir.resolve("foo");
  72                 Files.createFile(file);
  73                 Path link = dir.resolve("link");
  74                 Files.createSymbolicLink(link, file);
  75                 try {
  76                     Files.newByteChannel(link, READ, WRITE, DELETE_ON_CLOSE);
  77                     throw new RuntimeException("IOException expected");
  78                 } catch (IOException ignore) { }
  79             }
  80 
  81             // check that DELETE_ON_CLOSE works with files created via open
  82             // directories
< prev index next >