Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/rmi/log/ReliableLog/LogAlignmentTest.java
38857 views
1
/*
2
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @bug 4094889
26
* @summary rmid can have a corrupted log
27
*
28
* @run main LogAlignmentTest
29
*/
30
31
/* Fault: ReliableLog used RandomAccessFile.skipBytes() to seek past the end
32
* of a file. Unfortunately, skipBytes() doesn't do that, so the file was
33
* being misaligned.
34
*
35
* Reproduced by writing an odd number of bytes into an update, and then
36
* reloading.
37
*/
38
39
import java.io.File;
40
import java.io.PrintStream;
41
import java.io.Serializable;
42
import sun.rmi.log.LogHandler;
43
import sun.rmi.log.ReliableLog;
44
45
//import javasoft.sqe.harness.Status;
46
//import javasoft.sqe.harness.Test;
47
48
public class LogAlignmentTest
49
extends LogHandler
50
implements Serializable //, Test
51
{
52
static public void main (String[] argv)
53
{
54
LogAlignmentTest test = new LogAlignmentTest();
55
//Status status = test.run (argv, System.err, System.out);
56
//status.exit();
57
test.run (argv, System.err, System.out);
58
}
59
60
//public Status run (String argv[], PrintStream log, PrintStream out)
61
public void run (String argv[], PrintStream log, PrintStream out)
62
{
63
try {
64
regtest(130, "./logalign_tmp", log, out);
65
regtest(131, "./logalign_tmp", log, out);
66
} catch (Exception e) {
67
e.printStackTrace (log);
68
//return (Status.failed
69
throw (new RuntimeException
70
("Exception in regression test for bugid 4094889"));
71
}
72
//return (Status.passed ("OKAY"));
73
}
74
75
static private void regtest(int updatesz, String dir, PrintStream lg, PrintStream out)
76
throws Exception
77
{
78
try {
79
LogAlignmentTest handler = new LogAlignmentTest();
80
ReliableLog log = new ReliableLog (dir, handler, false);
81
82
// Write a preamble update
83
String c = "[";
84
handler.basicUpdate (c);
85
log.update (c, true);
86
87
// Generate the requested size update (single chars)
88
char[] up = new char[updatesz];
89
int i;
90
for (i = 0; i < updatesz; i++) {
91
up[i] = (char)(65 + (i % 26));
92
}
93
c = new String (up);
94
handler.basicUpdate (c);
95
log.update (c, true);
96
97
// Write it again, so we can misalign
98
handler.basicUpdate (c);
99
log.update (c, true);
100
101
// Write the suffix
102
c = "]";
103
handler.basicUpdate (c);
104
log.update (c, true);
105
106
// Read it back using a new context.
107
LogAlignmentTest handler2 = new LogAlignmentTest();
108
ReliableLog carbon = new ReliableLog (dir, handler2, false);
109
Object thingy = carbon.recover();
110
111
// The report bit
112
String orig = handler.contents;
113
String news = ((LogAlignmentTest)thingy).contents;
114
lg.println ("Original as saved: " + orig);
115
lg.println ("As restored : " + news);
116
if (orig.compareTo (news) != 0) {
117
throw new RuntimeException ("Restored string was different from saved string");
118
} else {
119
lg.println ("Matched OK. Test element passed.");
120
}
121
} finally {
122
// Trash the log directory, so a new snap will be taken in the next test
123
try {
124
File vs = new File (dir, "Version_Number");
125
vs.delete();
126
} catch (Exception e) {
127
}
128
try {
129
File vs = new File (dir, "New_Version_Number");
130
vs.delete();
131
} catch (Exception e) {
132
}
133
}
134
}
135
136
private String contents;
137
138
public LogAlignmentTest()
139
{
140
super();
141
this.contents = "?";
142
}
143
144
// implements LogHandler.initialSnapshot()
145
public Object initialSnapshot()
146
throws Exception
147
{
148
this.contents = "";
149
return (this);
150
}
151
152
// implements LogHandler.applyUpdate()
153
public Object applyUpdate (Object update, Object state)
154
throws Exception
155
{
156
// basicUpdate appends the string
157
((LogAlignmentTest)state).basicUpdate ((String)update);
158
return (state);
159
}
160
161
// an "update" is a short string to append to this.contents (must ignore state)
162
public void basicUpdate (String extra)
163
{
164
this.contents = this.contents + extra;
165
}
166
}
167
168