author | dfuchs |
Wed, 25 Feb 2015 18:41:07 +0100 | |
changeset 29117 | 7956b5dc0eac |
parent 27191 | 45a3002de56f |
child 30046 | cf2c86e1819e |
permissions | -rw-r--r-- |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
1 |
/* |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
2 |
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
4 |
* |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
8 |
* |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
13 |
* accompanied this code). |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
14 |
* |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
18 |
* |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
21 |
* questions. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
22 |
*/ |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
23 |
import java.io.ByteArrayInputStream; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
24 |
import java.io.ByteArrayOutputStream; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
25 |
import java.io.FilePermission; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
26 |
import java.io.IOException; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
27 |
import java.io.OutputStream; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
28 |
import java.lang.reflect.Field; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
29 |
import java.nio.file.Files; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
30 |
import java.nio.file.Paths; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
31 |
import java.security.CodeSource; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
32 |
import java.security.Permission; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
33 |
import java.security.PermissionCollection; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
34 |
import java.security.Permissions; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
35 |
import java.security.Policy; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
36 |
import java.security.ProtectionDomain; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
37 |
import java.util.Arrays; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
38 |
import java.util.Collections; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
39 |
import java.util.Enumeration; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
40 |
import java.util.List; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
41 |
import java.util.Properties; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
42 |
import java.util.UUID; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
43 |
import java.util.concurrent.Callable; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
44 |
import java.util.concurrent.atomic.AtomicBoolean; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
45 |
import java.util.logging.FileHandler; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
46 |
import java.util.logging.Level; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
47 |
import java.util.logging.LogManager; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
48 |
import java.util.logging.LogRecord; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
49 |
import java.util.logging.LoggingPermission; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
50 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
51 |
/** |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
52 |
* @test |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
53 |
* @bug 8059767 |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
54 |
* @summary tests that FileHandler can accept a long limit. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
55 |
* @run main/othervm FileHandlerLongLimit UNSECURE |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
56 |
* @run main/othervm FileHandlerLongLimit SECURE |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
57 |
* @author danielfuchs |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
58 |
*/ |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
59 |
public class FileHandlerLongLimit { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
60 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
61 |
/** |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
62 |
* We will test handling of limit and overflow of MeteredStream.written in |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
63 |
* two configurations. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
64 |
* UNSECURE: No security manager. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
65 |
* SECURE: With the security manager present - and the required |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
66 |
* permissions granted. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
67 |
*/ |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
68 |
public static enum TestCase { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
69 |
UNSECURE, SECURE; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
70 |
public void run(Properties propertyFile) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
71 |
System.out.println("Running test case: " + name()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
72 |
Configure.setUp(this, propertyFile); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
73 |
test(this.name() + " " + propertyFile.getProperty("test.name"), propertyFile, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
74 |
Long.parseLong(propertyFile.getProperty(FileHandler.class.getName()+".limit"))); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
75 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
76 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
77 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
78 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
79 |
private static final String PREFIX = |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
80 |
"FileHandler-" + UUID.randomUUID() + ".log"; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
81 |
private static final String userDir = System.getProperty("user.dir", "."); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
82 |
private static final boolean userDirWritable = Files.isWritable(Paths.get(userDir)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
83 |
private static final Field limitField; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
84 |
private static final Field meterField; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
85 |
private static final Field writtenField; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
86 |
private static final Field outField; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
87 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
88 |
private static final List<Properties> properties; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
89 |
static { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
90 |
Properties props1 = new Properties(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
91 |
Properties props2 = new Properties(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
92 |
Properties props3 = new Properties(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
93 |
props1.setProperty("test.name", "with limit=Integer.MAX_VALUE"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
94 |
props1.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
95 |
props1.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(Integer.MAX_VALUE)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
96 |
props2.setProperty("test.name", "with limit=Integer.MAX_VALUE*4"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
97 |
props2.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
98 |
props2.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(((long)Integer.MAX_VALUE)*4)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
99 |
props3.setProperty("test.name", "with limit=Long.MAX_VALUE - 1024"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
100 |
props3.setProperty(FileHandler.class.getName() + ".pattern", PREFIX); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
101 |
props3.setProperty(FileHandler.class.getName() + ".limit", String.valueOf(Long.MAX_VALUE - 1024)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
102 |
properties = Collections.unmodifiableList(Arrays.asList( |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
103 |
props1, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
104 |
props2, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
105 |
props3)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
106 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
107 |
Class<?> metteredStreamClass = Class.forName(FileHandler.class.getName()+"$MeteredStream"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
108 |
limitField = FileHandler.class.getDeclaredField("limit"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
109 |
limitField.setAccessible(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
110 |
meterField = FileHandler.class.getDeclaredField("meter"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
111 |
meterField.setAccessible(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
112 |
writtenField = metteredStreamClass.getDeclaredField("written"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
113 |
writtenField.setAccessible(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
114 |
outField = metteredStreamClass.getDeclaredField("out"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
115 |
outField.setAccessible(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
116 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
117 |
} catch (NoSuchFieldException | ClassNotFoundException x) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
118 |
throw new ExceptionInInitializerError(x); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
119 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
120 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
121 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
122 |
private static class TestOutputStream extends OutputStream { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
123 |
final OutputStream delegate; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
124 |
TestOutputStream(OutputStream delegate) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
125 |
this.delegate = delegate; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
126 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
127 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
128 |
public void write(int b) throws IOException { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
129 |
// do nothing - we only pretend to write something... |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
130 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
131 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
132 |
public void close() throws IOException { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
133 |
delegate.close(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
134 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
135 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
136 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
137 |
public void flush() throws IOException { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
138 |
delegate.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
139 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
140 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
141 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
142 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
143 |
public static void main(String... args) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
144 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
145 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
146 |
if (args == null || args.length == 0) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
147 |
args = new String[] { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
148 |
TestCase.UNSECURE.name(), |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
149 |
TestCase.SECURE.name(), |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
150 |
}; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
151 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
152 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
153 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
154 |
for (String testName : args) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
155 |
for (Properties propertyFile : properties) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
156 |
TestCase test = TestCase.valueOf(testName); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
157 |
test.run(propertyFile); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
158 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
159 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
160 |
} finally { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
161 |
if (userDirWritable) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
162 |
Configure.doPrivileged(() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
163 |
// cleanup - delete files that have been created |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
164 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
165 |
Files.list(Paths.get(userDir)) |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
166 |
.filter((f) -> f.toString().contains(PREFIX)) |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
167 |
.forEach((f) -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
168 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
169 |
System.out.println("deleting " + f); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
170 |
Files.delete(f); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
171 |
} catch(Throwable t) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
172 |
System.err.println("Failed to delete " + f + ": " + t); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
173 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
174 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
175 |
} catch(Throwable t) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
176 |
System.err.println("Cleanup failed to list files: " + t); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
177 |
t.printStackTrace(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
178 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
179 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
180 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
181 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
182 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
183 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
184 |
static class Configure { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
185 |
static Policy policy = null; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
186 |
static final AtomicBoolean allowAll = new AtomicBoolean(false); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
187 |
static void setUp(TestCase test, Properties propertyFile) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
188 |
switch (test) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
189 |
case SECURE: |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
190 |
if (policy == null && System.getSecurityManager() != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
191 |
throw new IllegalStateException("SecurityManager already set"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
192 |
} else if (policy == null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
193 |
policy = new SimplePolicy(TestCase.SECURE, allowAll); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
194 |
Policy.setPolicy(policy); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
195 |
System.setSecurityManager(new SecurityManager()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
196 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
197 |
if (System.getSecurityManager() == null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
198 |
throw new IllegalStateException("No SecurityManager."); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
199 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
200 |
if (policy == null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
201 |
throw new IllegalStateException("policy not configured"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
202 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
203 |
break; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
204 |
case UNSECURE: |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
205 |
if (System.getSecurityManager() != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
206 |
throw new IllegalStateException("SecurityManager already set"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
207 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
208 |
break; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
209 |
default: |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
210 |
new InternalError("No such testcase: " + test); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
211 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
212 |
doPrivileged(() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
213 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
214 |
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
215 |
propertyFile.store(bytes, propertyFile.getProperty("test.name")); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
216 |
ByteArrayInputStream bais = new ByteArrayInputStream(bytes.toByteArray()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
217 |
LogManager.getLogManager().readConfiguration(bais); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
218 |
} catch (IOException ex) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
219 |
throw new RuntimeException(ex); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
220 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
221 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
222 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
223 |
static void doPrivileged(Runnable run) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
224 |
allowAll.set(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
225 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
226 |
run.run(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
227 |
} finally { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
228 |
allowAll.set(false); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
229 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
230 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
231 |
static <T> T callPrivileged(Callable<T> call) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
232 |
allowAll.set(true); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
233 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
234 |
return call.call(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
235 |
} finally { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
236 |
allowAll.set(false); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
237 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
238 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
239 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
240 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
241 |
@FunctionalInterface |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
242 |
public static interface FileHandlerSupplier { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
243 |
public FileHandler test() throws Exception; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
244 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
245 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
246 |
private static void checkException(Class<? extends Exception> type, FileHandlerSupplier test) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
247 |
Throwable t = null; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
248 |
FileHandler f = null; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
249 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
250 |
f = test.test(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
251 |
} catch (Throwable x) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
252 |
t = x; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
253 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
254 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
255 |
if (type != null && t == null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
256 |
throw new RuntimeException("Expected " + type.getName() + " not thrown"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
257 |
} else if (type != null && t != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
258 |
if (type.isInstance(t)) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
259 |
System.out.println("Recieved expected exception: " + t); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
260 |
} else { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
261 |
throw new RuntimeException("Exception type mismatch: " |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
262 |
+ type.getName() + " expected, " |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
263 |
+ t.getClass().getName() + " received.", t); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
264 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
265 |
} else if (t != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
266 |
throw new RuntimeException("Unexpected exception received: " + t, t); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
267 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
268 |
} finally { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
269 |
if (f != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
270 |
// f should always be null when an exception is expected, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
271 |
// but in case the test doesn't behave as expected we will |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
272 |
// want to close f. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
273 |
try { f.close(); } catch (Throwable x) {}; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
274 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
275 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
276 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
277 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
278 |
static final class TestAssertException extends RuntimeException { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
279 |
TestAssertException(String msg) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
280 |
super(msg); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
281 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
282 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
283 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
284 |
private static void assertEquals(long expected, long received, String msg) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
285 |
if (expected != received) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
286 |
throw new TestAssertException("Unexpected result for " + msg |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
287 |
+ ".\n\texpected: " + expected |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
288 |
+ "\n\tactual: " + received); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
289 |
} else { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
290 |
System.out.println("Got expected " + msg + ": " + received); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
291 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
292 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
293 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
294 |
private static long getLimit(FileHandler handler) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
295 |
return Configure.callPrivileged((Callable<Long>)() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
296 |
return limitField.getLong(handler); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
297 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
298 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
299 |
private static OutputStream getMeteredOutput(FileHandler handler) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
300 |
return Configure.callPrivileged((Callable<OutputStream>)() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
301 |
final OutputStream metered = OutputStream.class.cast(meterField.get(handler)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
302 |
return metered; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
303 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
304 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
305 |
private static TestOutputStream setTestOutputStream(OutputStream metered) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
306 |
return Configure.callPrivileged((Callable<TestOutputStream>)() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
307 |
outField.set(metered, new TestOutputStream(OutputStream.class.cast(outField.get(metered)))); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
308 |
return TestOutputStream.class.cast(outField.get(metered)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
309 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
310 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
311 |
private static long getWritten(OutputStream metered) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
312 |
return Configure.callPrivileged((Callable<Long>)() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
313 |
return writtenField.getLong(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
314 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
315 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
316 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
317 |
private static long setWritten(OutputStream metered, long newValue) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
318 |
return Configure.callPrivileged((Callable<Long>)() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
319 |
writtenField.setLong(metered, newValue); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
320 |
return writtenField.getLong(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
321 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
322 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
323 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
324 |
public static FileHandler testFileHandlerLimit(FileHandlerSupplier supplier, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
325 |
long limit) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
326 |
Configure.doPrivileged(() -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
327 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
328 |
Files.deleteIfExists(Paths.get(PREFIX)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
329 |
} catch (IOException x) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
330 |
throw new RuntimeException(x); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
331 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
332 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
333 |
final FileHandler fh = supplier.test(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
334 |
try { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
335 |
// verify we have the expected limit |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
336 |
assertEquals(limit, getLimit(fh), "limit"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
337 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
338 |
// get the metered output stream |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
339 |
OutputStream metered = getMeteredOutput(fh); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
340 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
341 |
// we don't want to actually write to the file, so let's |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
342 |
// redirect the metered to our own TestOutputStream. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
343 |
setTestOutputStream(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
344 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
345 |
// check that fh.meter.written is 0 |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
346 |
assertEquals(0, getWritten(metered), "written"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
347 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
348 |
// now we're going to publish a series of log records |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
349 |
// we're using the same log record over and over to make |
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
350 |
// sure we get the same amount of bytes. |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
351 |
String msg = "this is at least 10 chars long"; |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
352 |
LogRecord record = new LogRecord(Level.SEVERE, msg); |
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
353 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
354 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
355 |
long w = getWritten(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
356 |
long offset = getWritten(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
357 |
System.out.println("first offset is: " + offset); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
358 |
|
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
359 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
360 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
361 |
offset = getWritten(metered) - w; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
362 |
w = getWritten(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
363 |
System.out.println("second offset is: " + offset); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
364 |
|
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
365 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
366 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
367 |
offset = getWritten(metered) - w; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
368 |
w = getWritten(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
369 |
System.out.println("third offset is: " + offset); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
370 |
|
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
371 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
372 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
373 |
offset = getWritten(metered) - w; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
374 |
System.out.println("fourth offset is: " + offset); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
375 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
376 |
// Now set fh.meter.written to something close to the limit, |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
377 |
// so that we can trigger log file rotation. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
378 |
assertEquals(limit-2*offset+10, setWritten(metered, limit-2*offset+10), "written"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
379 |
w = getWritten(metered); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
380 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
381 |
// publish one more log record. we should still be just beneath |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
382 |
// the limit |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
383 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
384 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
385 |
assertEquals(w+offset, getWritten(metered), "written"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
386 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
387 |
// check that fh still has the same MeteredStream - indicating |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
388 |
// that the file hasn't rotated. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
389 |
if (getMeteredOutput(fh) != metered) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
390 |
throw new RuntimeException("Log should not have rotated"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
391 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
392 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
393 |
// Now publish two log record. The spec is a bit vague about when |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
394 |
// exactly the log will be rotated - it could happen just after |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
395 |
// writing the first log record or just before writing the next |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
396 |
// one. We publich two - so we're sure that the log must have |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
397 |
// rotated. |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
398 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
399 |
fh.flush(); |
29117
7956b5dc0eac
8072645: java.util.logging should use java.time to get more precise time stamps
dfuchs
parents:
27191
diff
changeset
|
400 |
fh.publish(record); |
27191
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
401 |
fh.flush(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
402 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
403 |
// Check that fh.meter is a different instance of MeteredStream. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
404 |
if (getMeteredOutput(fh) == metered) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
405 |
throw new RuntimeException("Log should have rotated"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
406 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
407 |
// success! |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
408 |
return fh; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
409 |
} catch (Error | Exception x) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
410 |
// if we get an exception we need to close fh. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
411 |
// if we don't get an exception, fh will be closed by the caller. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
412 |
// (and that's why we dont use try-with-resources/finally here). |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
413 |
try { fh.close(); } catch(Throwable t) {t.printStackTrace();} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
414 |
throw x; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
415 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
416 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
417 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
418 |
public static void test(String name, Properties props, long limit) throws Exception { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
419 |
System.out.println("Testing: " + name); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
420 |
Class<? extends Exception> expectedException = null; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
421 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
422 |
if (userDirWritable || expectedException != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
423 |
// These calls will create files in user.dir. |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
424 |
// The file name contain a random UUID (PREFIX) which identifies them |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
425 |
// and allow us to remove them cleanly at the end (see finally block |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
426 |
// in main()). |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
427 |
checkException(expectedException, () -> new FileHandler()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
428 |
checkException(expectedException, () -> { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
429 |
final FileHandler fh = new FileHandler(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
430 |
assertEquals(limit, getLimit(fh), "limit"); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
431 |
return fh; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
432 |
}); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
433 |
checkException(expectedException, () -> testFileHandlerLimit( |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
434 |
() -> new FileHandler(), |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
435 |
limit)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
436 |
checkException(expectedException, () -> testFileHandlerLimit( |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
437 |
() -> new FileHandler(PREFIX, Long.MAX_VALUE, 1, true), |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
438 |
Long.MAX_VALUE)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
439 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
440 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
441 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
442 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
443 |
final static class PermissionsBuilder { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
444 |
final Permissions perms; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
445 |
public PermissionsBuilder() { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
446 |
this(new Permissions()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
447 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
448 |
public PermissionsBuilder(Permissions perms) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
449 |
this.perms = perms; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
450 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
451 |
public PermissionsBuilder add(Permission p) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
452 |
perms.add(p); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
453 |
return this; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
454 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
455 |
public PermissionsBuilder addAll(PermissionCollection col) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
456 |
if (col != null) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
457 |
for (Enumeration<Permission> e = col.elements(); e.hasMoreElements(); ) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
458 |
perms.add(e.nextElement()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
459 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
460 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
461 |
return this; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
462 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
463 |
public Permissions toPermissions() { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
464 |
final PermissionsBuilder builder = new PermissionsBuilder(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
465 |
builder.addAll(perms); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
466 |
return builder.perms; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
467 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
468 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
469 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
470 |
public static class SimplePolicy extends Policy { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
471 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
472 |
final Permissions permissions; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
473 |
final Permissions allPermissions; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
474 |
final AtomicBoolean allowAll; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
475 |
public SimplePolicy(TestCase test, AtomicBoolean allowAll) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
476 |
this.allowAll = allowAll; |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
477 |
permissions = new Permissions(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
478 |
permissions.add(new LoggingPermission("control", null)); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
479 |
permissions.add(new FilePermission(PREFIX+".lck", "read,write,delete")); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
480 |
permissions.add(new FilePermission(PREFIX, "read,write")); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
481 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
482 |
// these are used for configuring the test itself... |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
483 |
allPermissions = new Permissions(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
484 |
allPermissions.add(new java.security.AllPermission()); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
485 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
486 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
487 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
488 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
489 |
public boolean implies(ProtectionDomain domain, Permission permission) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
490 |
if (allowAll.get()) return allPermissions.implies(permission); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
491 |
return permissions.implies(permission); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
492 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
493 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
494 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
495 |
public PermissionCollection getPermissions(CodeSource codesource) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
496 |
return new PermissionsBuilder().addAll(allowAll.get() |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
497 |
? allPermissions : permissions).toPermissions(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
498 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
499 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
500 |
@Override |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
501 |
public PermissionCollection getPermissions(ProtectionDomain domain) { |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
502 |
return new PermissionsBuilder().addAll(allowAll.get() |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
503 |
? allPermissions : permissions).toPermissions(); |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
504 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
505 |
} |
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
506 |
|
45a3002de56f
8059767: FileHandler should allow 'long' limits and handle overflow of MeteredStream.written.
dfuchs
parents:
diff
changeset
|
507 |
} |