/* * Copyright (c) 2013, 2018, 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. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * 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. */ package jdk.test.lib.jfr; import java.io.File; import java.io.IOException; import java.nio.file.AccessDeniedException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import jdk.jfr.consumer.RecordedEvent; import jdk.jfr.consumer.RecordingFile; import jdk.test.lib.Asserts; /** * Common helper class. */ public class FileHelper { public static Path getDest(String subPath) throws IOException { Path path = Paths.get(subPath + "/test.jfr"); Path parent = path.getParent(); if (parent == null) { throw new IOException("No parent cound be found for path " + subPath); } Files.createDirectories(parent); return path; } public static Path createLongDir(Path root) throws IOException { final int minPathLength = 400; StringBuilder buff = new StringBuilder(); buff.append(root.toString()); while (buff.length() < minPathLength) { buff.append("/veryLongPath012345678901234567890123456789"); } Path path = Paths.get(buff.toString()); System.out.println("long dir=" + path); Files.createDirectories(path); return path; } public static Path getDestReadOnly(String subPath) throws IOException { final Path path = getDest(subPath); Path parent = path.getParent(); if (parent == null) { throw new IOException("No parent cound be found for path " + subPath); } parent.toFile().setReadOnly(); return path; } public static Path createReadOnlyFile(Path path) throws IOException { final Path createdPath = Files.createFile(path); createdPath.toFile().setReadOnly(); return createdPath; } public static Path createReadOnlyDir(Path path) throws IOException { final Path createdPath = Files.createDirectories(path); createdPath.toFile().setReadOnly(); return createdPath; } public static Path getDestNotExist() { return Paths.get(".", "thisDirDoesNotExist/test.jfr"); } public static boolean isReadOnlyPath(Path path) throws IOException { // Files.isWritable(path) can not really be trusted. At least not on Windows. // If path is a directory, we try to create a new file in it. if (Files.isDirectory(path)) { try { Path f = Files.createFile(Paths.get(path.toString(), "dummyFileToCheckReadOnly")); System.out.printf("Dir is not read-only, created %s, exists=%b%n", f, Files.exists(f)); return false; } catch (AccessDeniedException e) { System.out.printf("'%s' verified read-only by %s%n", path, e.toString()); return true; } } else { boolean isReadOnly = !Files.isWritable(path); System.out.format("isReadOnly '%s': %b%n", path, isReadOnly); return isReadOnly; } } public static void verifyRecording(File file) throws Exception { Asserts.assertTrue(file.exists(), file.getAbsolutePath() + " does not exist"); Asserts.assertTrue(file.isFile(), file.getAbsolutePath() + " is not a file"); Asserts.assertGreaterThan(file.length(), 0L, "Size of recording is 0."); List events = RecordingFile.readAllEvents(file.toPath()); for (RecordedEvent event : events) { System.out.printf("First event in recording '%s':%n%s", file.getName(), event); return; } Asserts.fail("No events in file " + file.getName()); } }