/* * Copyright (c) 2017, 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 java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Paths; import java.security.*; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.FileHandler; import java.util.logging.LogManager; /** * @test * @bug 8189953 * @summary tests the pattern generation algorithm * @modules java.logging/java.util.logging:open * @run main/othervm FileHandlerPatternGeneration * @author danielfuchs */ public class FileHandlerPatternGeneration { /** * An array of strings where the elements at even indices are the input * to give to FileHandler::generate(pattern, count, generation, unique), * and the elements at the next odd index are a partially computed expected * output, where %t, %h, %u, %g and file separator still need to be replaced. * The final expected output is obtained by passing the partially computed * output to FileHandlerPatternGeneration::generateExpected *
* The test verifies that {@code
* FileHandler.generate(PATTERN[i], c, g, u).toString()
* }
* is equal to {@code
* FileHandlerPatternGeneration.generateExpected(PATTERN[i],
* PATTERN[i+1],
* c, g, u)
* }
*/
static final String[] PATTERNS = {
"C:/Workspace/hoge.log", "C:/Workspace/hoge.log",
"C:/Workspace%g/hoge.log", "C:/Workspace%g/hoge.log",
"C:/%uWorkspace/hoge.log", "C:/%uWorkspace/hoge.log",
"C:/%uWorkspace%g/hoge.log", "C:/%uWorkspace%g/hoge.log",
"C:/Workspace/%ghoge.log", "C:/Workspace/%ghoge.log",
"C:/Workspace/%ghoge%u.log", "C:/Workspace/%ghoge%u.log",
"C:/Workspace-%g/hoge.log", "C:/Workspace-%g/hoge.log",
"C:/Work%hspace/hoge.log", "%h/space/hoge.log",
"C:/Works%tpace%g/hoge.log", "%t/pace%g/hoge.log",
"C:/%uWork%hspace/hoge.log", "%h/space/hoge.log",
"C:/%uWorkspace%g/%thoge.log", "%t/hoge.log",
"C:/Workspace/%g%h%%hoge.log", "%h/%%hoge.log",
"C:/Work%h%%hspace/hoge.log", "%h/%%hspace/hoge.log",
"C:/Works%t%%hpace%g/hoge.log", "%t/%%hpace%g/hoge.log",
"C:/%uWork%h%%tspace/hoge.log", "%h/%%tspace/hoge.log",
"C:/%uWorkspace%g/%t%%hoge.log", "%t/%%hoge.log",
"C:/Workspace/%g%h%%hoge.log", "%h/%%hoge.log",
"ahaha", "ahaha",
"ahaha/ahabe", "ahaha/ahabe",
"../ahaha/ahabe", "../ahaha/ahabe",
"/x%ty/w/hoge.log", "%t/y/w/hoge.log",
"/x/%ty/w/hoge.log", "%t/y/w/hoge.log",
"/x%t/y/w/hoge.log", "%t/y/w/hoge.log",
"/x/%t/y/w/hoge.log", "%t/y/w/hoge.log",
"%ty/w/hoge.log", "%t/y/w/hoge.log",
"%t/y/w/hoge.log", "%t/y/w/hoge.log",
"/x%hy/w/hoge.log", "%h/y/w/hoge.log",
"/x/%hy/w/hoge.log", "%h/y/w/hoge.log",
"/x%h/y/w/hoge.log", "%h/y/w/hoge.log",
"/x/%h/y/w/hoge.log", "%h/y/w/hoge.log",
"%hy/w/hoge.log", "%h/y/w/hoge.log",
"%h/y/w/hoge.log", "%h/y/w/hoge.log",
"ahaha-%u-%g", "ahaha-%u-%g",
"ahaha-%g/ahabe-%u", "ahaha-%g/ahabe-%u",
"../ahaha-%u/ahabe", "../ahaha-%u/ahabe",
"/x%ty/w/hoge-%g.log", "%t/y/w/hoge-%g.log",
"/x/%ty/w/hoge-%u.log", "%t/y/w/hoge-%u.log",
"%u-%g/x%t/y/w/hoge.log", "%t/y/w/hoge.log",
"/x/%g%t%u/y/w/hoge.log", "%t/%u/y/w/hoge.log",
"%ty/w-%g/hoge.log", "%t/y/w-%g/hoge.log",
"%t/y/w-%u/hoge.log", "%t/y/w-%u/hoge.log",
"/x%hy/%u-%g-w/hoge.log", "%h/y/%u-%g-w/hoge.log",
"/x/%hy/w-%u-%g/hoge.log", "%h/y/w-%u-%g/hoge.log",
"/x%h/y/w/%u-%ghoge.log", "%h/y/w/%u-%ghoge.log",
"/x/%h/y/w/hoge-%u-%g.log", "%h/y/w/hoge-%u-%g.log",
"%hy/w/%u-%g-hoge.log", "%h/y/w/%u-%g-hoge.log",
"%h/y/w/hoge-%u-%g.log", "%h/y/w/hoge-%u-%g.log",
"/x/y/z/hoge-%u.log", "/x/y/z/hoge-%u.log",
};
// the (count, generation, unique) parameters to pass to
// FileHandler.generate(pattern, count, generation, unique)
static final int[][] GENERATIONS = {
{0, 0, 0},
{0, 1, 0},
{0, 1, 1},
{1, 1, 0},
{1, 1, 1},
{1, 1, 2},
{1, 2, 3},
{3, 4, 0},
{3, 4, 1},
{3, 4, 2},
{3, 0, 5},
{3, 1, 5},
{3, 2, 5},
};
static final Class