1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.util;
19
20 import java.io.BufferedReader;
21 import java.io.File;
22 import java.io.FileInputStream;
23 import java.io.FileNotFoundException;
24 import java.io.FileReader;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.InputStreamReader;
28 import java.util.zip.GZIPInputStream;
29
30
31 public class Compare {
32 static final int B1_NULL = -1;
33 static final int B2_NULL = -2;
34
35 private static final InputStream open(
36 final Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
37 final String fileName) throws IOException {
38 String resourceName = fileName;
39 if (fileName.startsWith("witness/")) {
40 resourceName = fileName.substring(fileName.lastIndexOf('/') + 1);
41 }
42 InputStream is = testClass.getResourceAsStream(resourceName);
43 if (is == null) {
44 File file = new File(fileName);
45 if (file.exists()) {
46 is = new FileInputStream(file);
47 } else {
48 throw new FileNotFoundException("Resource "
49 + resourceName + " not found");
50 }
51 }
52 return is;
53 }
54
55 public static boolean compare(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
56 final String file1,
57 final String file2)
58 throws IOException {
59 try (BufferedReader in1 = new BufferedReader(new FileReader(file1));
60 BufferedReader in2 = new BufferedReader(new InputStreamReader(
61 open(testClass, file2)))) {
62 return compare(testClass, file1, file2, in1, in2);
63 }
64 }
65
66 public static boolean compare(
67 Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
68
69 String s1;
70 int lineCounter = 0;
71
72 while ((s1 = in1.readLine()) != null) {
73 lineCounter++;
74
75 String s2 = in2.readLine();
76
77 if (!s1.equals(s2)) {
78 System.out.println(
79 "Files [" + file1 + "] and [" + file2 + "] differ on line "
80 + lineCounter);
81 System.out.println("One reads: [" + s1 + "].");
82 System.out.println("Other reads:[" + s2 + "].");
83 outputFile(testClass, file1);
84 outputFile(testClass, file2);
85
86 return false;
87 }
88 }
89
90
91 if (in2.read() != -1) {
92 System.out.println(
93 "File [" + file2 + "] longer than file [" + file1 + "].");
94 outputFile(testClass, file1);
95 outputFile(testClass, file2);
96
97 return false;
98 }
99
100 return true;
101 }
102
103
104
105
106
107
108 private static void outputFile(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file)
109 throws IOException {
110 InputStream is = open(testClass, file);
111 BufferedReader in1 = new BufferedReader(new InputStreamReader(is));
112
113 String s1;
114 int lineCounter = 0;
115 System.out.println("--------------------------------");
116 System.out.println("Contents of " + file + ":");
117
118 while ((s1 = in1.readLine()) != null) {
119 lineCounter++;
120 System.out.print(lineCounter);
121
122 if (lineCounter < 10) {
123 System.out.print(" : ");
124 } else if (lineCounter < 100) {
125 System.out.print(" : ");
126 } else if (lineCounter < 1000) {
127 System.out.print(" : ");
128 } else {
129 System.out.print(": ");
130 }
131
132 System.out.println(s1);
133 }
134 in1.close();
135 }
136
137
138 public static boolean gzCompare(final Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
139 final String actual,
140 final String expected)
141 throws IOException {
142 String resourceName = expected;
143 int lastSlash = expected.lastIndexOf("/");
144 if (lastSlash >= 0) {
145 resourceName = expected.substring(lastSlash + 1);
146 }
147 InputStream resourceStream = testClass.getResourceAsStream(resourceName);
148 if (resourceStream == null) {
149 throw new FileNotFoundException("Could not locate resource " + resourceName);
150 }
151
152 try (BufferedReader in1 = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(actual))));
153 BufferedReader in2 = new BufferedReader(new InputStreamReader(new GZIPInputStream(resourceStream)))) {
154 return gzCompare(testClass, actual, expected, in1, in2);
155 }
156 }
157
158 public static boolean gzCompare(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
159
160 String s1;
161 int lineCounter = 0;
162
163 while ((s1 = in1.readLine()) != null) {
164 lineCounter++;
165
166 String s2 = in2.readLine();
167
168 if (!s1.equals(s2)) {
169 System.out.println(
170 "Files [" + file1 + "] and [" + file2 + "] differ on line "
171 + lineCounter);
172 System.out.println("One reads: [" + s1 + "].");
173 System.out.println("Other reads:[" + s2 + "].");
174 outputFile(testClass, file1);
175 outputFile(testClass, file2);
176
177 return false;
178 }
179 }
180
181
182 if (in2.read() != -1) {
183 System.out.println(
184 "File [" + file2 + "] longer than file [" + file1 + "].");
185 outputFile(testClass, file1);
186 outputFile(testClass, file2);
187
188 return false;
189 }
190
191 return true;
192 }
193
194 }