jdk/test/java/util/logging/CheckZombieLockTest.java
author dfuchs
Tue, 19 Aug 2014 17:11:28 +0200
changeset 25998 3efc2a6b082a
parent 25389 6f994d9e1b57
child 30046 cf2c86e1819e
permissions -rw-r--r--
8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException Summary: CheckZombieLockTest and CheckLockLocationTest should work with different temporary log directories so that they can be run concurrently. This fix changes the name of the log directory used by CheckZombieLockTest. Reviewed-by: mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     1
/*
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     2
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     4
 *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     7
 * published by the Free Software Foundation.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     8
 *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    13
 * accompanied this code).
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    14
 *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    18
 *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    21
 * questions.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    22
 */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    23
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    24
/*
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    25
 * @test
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    26
 * @bug     8048020
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    27
 * @author  Daniel Fuchs
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    28
 * @summary Regression on java.util.logging.FileHandler.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    29
 *     The fix is to avoid filling up the file system with zombie lock files.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    30
 *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    31
 * @run  main/othervm CheckZombieLockTest WRITABLE CLOSE CLEANUP
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    32
 * @run  main/othervm CheckZombieLockTest CLEANUP
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    33
 * @run  main/othervm CheckZombieLockTest WRITABLE
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    34
 * @run  main/othervm CheckZombieLockTest CREATE_FIRST
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    35
 * @run  main/othervm CheckZombieLockTest CREATE_NEXT
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    36
 * @run  main/othervm CheckZombieLockTest CREATE_NEXT
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    37
 * @run  main/othervm CheckZombieLockTest CLEANUP
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    38
 * @run  main/othervm CheckZombieLockTest REUSE
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    39
 * @run  main/othervm CheckZombieLockTest CLEANUP
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    40
 */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    41
import java.io.File;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    42
import java.io.IOException;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    43
import java.nio.channels.FileChannel;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    44
import java.nio.file.Paths;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    45
import java.nio.file.StandardOpenOption;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    46
import java.util.ArrayList;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    47
import java.util.List;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    48
import java.util.UUID;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    49
import java.util.logging.FileHandler;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    50
import java.util.logging.Level;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    51
import java.util.logging.LogRecord;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    52
public class CheckZombieLockTest {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    53
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    54
    private static final String WRITABLE_DIR = "writable-lockfile-dir";
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    55
    private static volatile boolean supportsLocking = true;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    56
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    57
    static enum TestCase {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    58
        WRITABLE,  // just verifies that we can create a file in our 'writable-lockfile-dir'
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    59
        CLOSE, // checks that closing a FileHandler removes its lock file
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    60
        CREATE_FIRST, // verifies that 'writable-lockfile-dir' contains no lock, then creates a first FileHandler.
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    61
        CREATE_NEXT, // verifies that 'writable-lockfile-dir' contains a single lock, then creates the next FileHandler
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    62
        REUSE, // verifies that zombie lock files can be reused
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    63
        CLEANUP // removes "writable-lockfile-dir"
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    64
    };
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    65
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    66
    public static void main(String... args) throws IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    67
        // we'll base all file creation attempts on the system temp directory,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    68
        // %t
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    69
        File writableDir = setup();
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
    70
        System.out.println("Writable dir is: " + writableDir.getAbsolutePath());
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    71
        // we now have one writable directory to work with:
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    72
        //    writableDir
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    73
        if (args == null || args.length == 0) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    74
            args = new String[] { "WRITABLE", "CLOSE", "CLEANUP" };
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    75
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    76
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    77
            runTests(writableDir, args);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    78
        } catch (RuntimeException | IOException | Error x) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    79
            // some error occured: cleanup
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    80
            delete(writableDir);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    81
            throw x;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    82
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    83
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    84
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    85
    /**
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    86
     * @param writableDir in which log and lock file are created
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    87
     * @throws SecurityException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    88
     * @throws RuntimeException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    89
     * @throws IOException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    90
     */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    91
    private static void runTests(File writableDir, String... args) throws SecurityException,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    92
            RuntimeException, IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    93
        for (String arg : args) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    94
            switch(TestCase.valueOf(arg)) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    95
                // Test 1: makes sure we can create FileHandler in writable directory
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    96
                case WRITABLE: checkWritable(writableDir); break;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    97
                // Test 2: verifies that FileHandler.close() cleans up its lock file
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    98
                case CLOSE: testFileHandlerClose(writableDir); break;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
    99
                // Test 3: creates the first file handler
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   100
                case CREATE_FIRST: testFileHandlerCreate(writableDir, true); break;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   101
                // Test 4, 5, ... creates the next file handler
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   102
                case CREATE_NEXT: testFileHandlerCreate(writableDir, false); break;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   103
                // Checks that zombie lock files are reused appropriatly
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   104
                case REUSE: testFileHandlerReuse(writableDir); break;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   105
                // Removes the writableDir
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   106
                case CLEANUP: delete(writableDir); break;
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   107
                default: throw new RuntimeException("No such test case: " + arg);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   108
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   109
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   110
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   111
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   112
    /**
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   113
     * @param writableDir in which log and lock file are created
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   114
     * @throws SecurityException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   115
     * @throws RuntimeException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   116
     * @throws IOException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   117
     */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   118
    private static void checkWritable(File writableDir) throws SecurityException,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   119
            RuntimeException, IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   120
        // Test 1: make sure we can create/delete files in the writable dir.
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   121
        final File file = new File(writableDir, "test.txt");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   122
        if (!createFile(file, false)) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   123
            throw new IOException("Can't create " + file + "\n\tUnable to run test");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   124
        } else {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   125
            delete(file);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   126
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   127
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   128
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   129
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   130
    private static FileHandler createFileHandler(File writableDir) throws SecurityException,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   131
            RuntimeException, IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   132
        // Test 1: make sure we can create FileHandler in writable directory
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   133
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   134
            FileHandler handler = new FileHandler("%t/" + WRITABLE_DIR + "/log.log");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   135
            handler.publish(new LogRecord(Level.INFO, handler.toString()));
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   136
            handler.flush();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   137
            return handler;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   138
        } catch (IOException ex) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   139
            throw new RuntimeException("Test failed: should have been able"
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   140
                    + " to create FileHandler for " + "%t/" + WRITABLE_DIR
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   141
                    + "/log.log in writable directory.", ex);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   142
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   143
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   144
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   145
    private static List<File> listLocks(File writableDir, boolean print)
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   146
            throws IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   147
        List<File> locks = new ArrayList<>();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   148
        for (File f : writableDir.listFiles()) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   149
            if (print) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   150
                System.out.println("Found file: " + f.getName());
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   151
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   152
            if (f.getName().endsWith(".lck")) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   153
                locks.add(f);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   154
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   155
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   156
        return locks;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   157
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   158
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   159
    private static void testFileHandlerClose(File writableDir) throws IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   160
        File fakeLock = new File(writableDir, "log.log.lck");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   161
        if (!createFile(fakeLock, false)) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   162
            throw new IOException("Can't create fake lock file: " + fakeLock);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   163
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   164
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   165
            List<File> before = listLocks(writableDir, true);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   166
            System.out.println("before: " + before.size() + " locks found");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   167
            FileHandler handler = createFileHandler(writableDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   168
            System.out.println("handler created: " + handler);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   169
            List<File> after = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   170
            System.out.println("after creating handler: " + after.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   171
            handler.close();
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   172
            System.out.println("handler closed: " + handler);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   173
            List<File> afterClose = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   174
            System.out.println("after closing handler: " + afterClose.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   175
            afterClose.removeAll(before);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   176
            if (!afterClose.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   177
                throw new RuntimeException("Zombie lock file detected: " + afterClose);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   178
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   179
        } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   180
            if (fakeLock.canRead()) delete(fakeLock);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   181
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   182
        List<File> finalLocks = listLocks(writableDir, false);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   183
        System.out.println("After cleanup: " + finalLocks.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   184
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   185
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   186
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   187
    private static void testFileHandlerReuse(File writableDir) throws IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   188
        List<File> before = listLocks(writableDir, true);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   189
        System.out.println("before: " + before.size() + " locks found");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   190
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   191
            if (!before.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   192
                throw new RuntimeException("Expected no lock file! Found: " + before);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   193
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   194
        } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   195
            before.stream().forEach(CheckZombieLockTest::delete);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   196
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   197
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   198
        FileHandler handler1 = createFileHandler(writableDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   199
        System.out.println("handler created: " + handler1);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   200
        List<File> after = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   201
        System.out.println("after creating handler: " + after.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   202
        if (after.size() != 1) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   203
            throw new RuntimeException("Unexpected number of lock files found for "
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   204
                    + handler1 + ": " + after);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   205
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   206
        final File lock = after.get(0);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   207
        after.clear();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   208
        handler1.close();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   209
        after = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   210
        System.out.println("after closing handler: " + after.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   211
        if (!after.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   212
            throw new RuntimeException("Unexpected number of lock files found for "
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   213
                    + handler1 + ": " + after);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   214
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   215
        if (!createFile(lock, false)) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   216
            throw new IOException("Can't create fake lock file: " + lock);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   217
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   218
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   219
            before = listLocks(writableDir, true);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   220
            System.out.println("before: " + before.size() + " locks found");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   221
            if (before.size() != 1) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   222
                throw new RuntimeException("Unexpected number of lock files found: "
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   223
                        + before + " expected [" + lock + "].");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   224
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   225
            FileHandler handler2 = createFileHandler(writableDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   226
            System.out.println("handler created: " + handler2);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   227
            after = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   228
            System.out.println("after creating handler: " + after.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   229
            after.removeAll(before);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   230
            if (!after.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   231
                throw new RuntimeException("Unexpected lock file found: " + after
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   232
                        + "\n\t" + lock + " should have been reused");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   233
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   234
            handler2.close();
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   235
            System.out.println("handler closed: " + handler2);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   236
            List<File> afterClose = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   237
            System.out.println("after closing handler: " + afterClose.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   238
            if (!afterClose.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   239
                throw new RuntimeException("Zombie lock file detected: " + afterClose);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   240
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   241
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   242
            if (supportsLocking) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   243
                FileChannel fc = FileChannel.open(Paths.get(lock.getAbsolutePath()),
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   244
                    StandardOpenOption.CREATE_NEW, StandardOpenOption.APPEND,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   245
                    StandardOpenOption.WRITE);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   246
                try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   247
                    if (fc.tryLock() != null) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   248
                        System.out.println("locked: " + lock);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   249
                        handler2 = createFileHandler(writableDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   250
                        System.out.println("handler created: " + handler2);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   251
                        after = listLocks(writableDir, true);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   252
                        System.out.println("after creating handler: " + after.size()
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   253
                                + " locks found");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   254
                        after.removeAll(before);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   255
                        if (after.size() != 1) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   256
                            throw new RuntimeException("Unexpected lock files found: " + after
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   257
                                + "\n\t" + lock + " should not have been reused");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   258
                        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   259
                    } else {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   260
                        throw new RuntimeException("Failed to lock: " + lock);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   261
                    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   262
                } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   263
                    delete(lock);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   264
                }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   265
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   266
        } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   267
            List<File> finalLocks = listLocks(writableDir, false);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   268
            System.out.println("end: " + finalLocks.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   269
            delete(writableDir);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   270
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   271
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   272
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   273
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   274
    private static void testFileHandlerCreate(File writableDir, boolean first)
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   275
            throws IOException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   276
        List<File> before = listLocks(writableDir, true);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   277
        System.out.println("before: " + before.size() + " locks found");
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   278
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   279
            if (first && !before.isEmpty()) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   280
                throw new RuntimeException("Expected no lock file! Found: " + before);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   281
            } else if (!first && before.size() != 1) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   282
                throw new RuntimeException("Expected a single lock file! Found: " + before);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   283
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   284
        } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   285
            before.stream().forEach(CheckZombieLockTest::delete);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   286
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   287
        FileHandler handler = createFileHandler(writableDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   288
        System.out.println("handler created: " + handler);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   289
        List<File> after = listLocks(writableDir, true);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   290
        System.out.println("after creating handler: " + after.size() + " locks found");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   291
        if (after.size() != 1) {
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   292
            throw new RuntimeException("Unexpected number of lock files found for "
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   293
                    + handler + ": " + after);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   294
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   295
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   296
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   297
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   298
    /**
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   299
     * Setup all the files and directories needed for the tests
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   300
     *
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   301
     * @return writable directory created that needs to be deleted when done
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   302
     * @throws RuntimeException
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   303
     */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   304
    private static File setup() throws RuntimeException {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   305
        // First do some setup in the temporary directory (using same logic as
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   306
        // FileHandler for %t pattern)
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   307
        String tmpDir = System.getProperty("java.io.tmpdir"); // i.e. %t
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   308
        if (tmpDir == null) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   309
            tmpDir = System.getProperty("user.home");
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   310
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   311
        File tmpOrHomeDir = new File(tmpDir);
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   312
        // Create a writable directory here (%t/writable-lockfile-dir)
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   313
        File writableDir = new File(tmpOrHomeDir, WRITABLE_DIR);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   314
        if (!createFile(writableDir, true)) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   315
            throw new RuntimeException("Test setup failed: unable to create"
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   316
                    + " writable working directory "
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   317
                    + writableDir.getAbsolutePath() );
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   318
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   319
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   320
        // try to determine whether file locking is supported
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   321
        final String uniqueFileName = UUID.randomUUID().toString()+".lck";
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   322
        try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   323
            FileChannel fc = FileChannel.open(Paths.get(writableDir.getAbsolutePath(),
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   324
                    uniqueFileName),
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   325
                    StandardOpenOption.CREATE_NEW, StandardOpenOption.APPEND,
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   326
                    StandardOpenOption.DELETE_ON_CLOSE);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   327
            try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   328
                fc.tryLock();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   329
            } catch(IOException x) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   330
                supportsLocking = false;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   331
            } finally {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   332
                fc.close();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   333
            }
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   334
        } catch (IOException t) {
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   335
            // should not happen
25998
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   336
            System.err.println("Failed to create new file " + uniqueFileName +
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   337
                    " in " + writableDir.getAbsolutePath());
3efc2a6b082a 8052403: java/util/logging/CheckZombieLockTest.java fails with NoSuchFileException
dfuchs
parents: 25389
diff changeset
   338
            throw new RuntimeException("Test setup failed: unable to run test", t);
25389
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   339
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   340
        return writableDir;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   341
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   342
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   343
    /**
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   344
     * @param newFile
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   345
     * @return true if file already exists or creation succeeded
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   346
     */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   347
    private static boolean createFile(File newFile, boolean makeDirectory) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   348
        if (newFile.exists()) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   349
            return true;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   350
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   351
        if (makeDirectory) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   352
            return newFile.mkdir();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   353
        } else {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   354
            try {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   355
                return newFile.createNewFile();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   356
            } catch (IOException ioex) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   357
                ioex.printStackTrace();
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   358
                return false;
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   359
            }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   360
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   361
    }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   362
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   363
    /*
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   364
     * Recursively delete all files starting at specified file
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   365
     */
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   366
    private static void delete(File f) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   367
        if (f != null && f.isDirectory()) {
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   368
            for (File c : f.listFiles())
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   369
                delete(c);
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   370
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   371
        if (!f.delete())
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   372
            System.err.println(
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   373
                    "WARNING: unable to delete/cleanup writable test directory: "
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   374
                    + f );
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   375
        }
6f994d9e1b57 8048020: Regression on java.util.logging.FileHandler
dfuchs
parents:
diff changeset
   376
}