1 package io.guixer.logs;
2
3 import static com.google.common.collect.Lists.newArrayList;
4 import static java.nio.charset.StandardCharsets.UTF_8;
5 import static org.apache.commons.lang3.StringUtils.substringAfter;
6 import static org.joda.time.DateTimeZone.UTC;
7 import static org.junit.jupiter.api.Assertions.assertEquals;
8 import static org.junit.jupiter.api.Assertions.assertSame;
9
10 import java.io.File;
11 import java.io.IOException;
12 import java.util.Collection;
13 import java.util.List;
14 import java.util.stream.Stream;
15
16 import org.apache.commons.io.FileUtils;
17 import org.junit.jupiter.params.provider.Arguments;
18
19 import io.guixer.logs.ElaborateLog.Attribute;
20 import io.guixer.logs.ElaborateLog.Group;
21 import io.guixer.logs.ElaborateLog.Intent;
22 import io.guixer.logs.ElaborateLog.Status;
23 import io.guixer.logs.ElaborateLog.Step;
24 import io.guixer.logs.lines.LogLine;
25 import io.guixer.logs.lines.LogLine.Type;
26
27 public abstract class LogTestUtils {
28
29 public static void assertLogEquals(
30 final Log log,
31 final ElaborateLog elaborateLog
32 ) {
33
34
35
36 assertEquals(log.getGuixerVersion(), elaborateLog.getGuixerVersion());
37 assertEquals(log.getTimeMillis(), elaborateLog.getTimeMillis());
38 assertEquals(log.getTestClassName(), elaborateLog.getTestClassName());
39 assertEquals(log.getTestClassSimpleName(), elaborateLog.getTestClassSimpleName());
40 assertEquals(log.getTestMethodName(), elaborateLog.getTestMethodName());
41 assertEquals(log.getTestClassName(), elaborateLog.getTestClassName());
42 assertEquals(log.getScenario(), elaborateLog.getScenario());
43 assertEquals(log.getSuccessCount(), elaborateLog.getSuccessCount());
44 assertEquals(log.getFailureCount(), elaborateLog.getFailureCount());
45 assertEquals(log.isInError(), elaborateLog.isInError());
46 assertEquals(log.isInError(), elaborateLog.getError() != null);
47
48 try {
49 ElaborateLogUtils.generateXML(elaborateLog, new File("target", "coco.xml"));
50 } catch (final Exception e) {
51 throw new RuntimeException(e);
52 }
53
54
55
56 final ElaborateLog ref = ElaborateLogUtils.toElaborateLog(log);
57
58 assertLogEquals(ref, elaborateLog);
59
60
61
62 final Log log2 = ElaborateLogUtils.toGuixerOutLog(elaborateLog, elaborateLog.getRawBytes());
63
64 assertLogEquals(log, log2);
65 }
66
67 public static void assertLogEquals(
68 final ElaborateLog ref,
69 final ElaborateLog test
70 ) {
71
72 assertEquals(ref.getGuixerVersion(), test.getGuixerVersion());
73 assertEquals(ref.getTimeMillis(), test.getTimeMillis());
74 assertEquals(ref.getTestClassName(), test.getTestClassName());
75 assertEquals(ref.getTestClassSimpleName(), test.getTestClassSimpleName());
76 assertEquals(ref.getTestMethodName(), test.getTestMethodName());
77 assertEquals(ref.getTestClassName(), test.getTestClassName());
78 assertEquals(ref.getScenario(), test.getScenario());
79 assertEquals(ref.getSuccessCount(), test.getSuccessCount());
80 assertEquals(ref.getFailureCount(), test.getFailureCount());
81 assertEquals(ref.isInError(), test.isInError());
82 assertEquals(ref.isInError(), ref.getError() != null);
83
84 assertEquals(ref.getError() == null, test.getError() == null);
85 if (ref.getError() != null) {
86 assertEquals(ref.getError().getTimeMillis(), test.getError().getTimeMillis());
87 assertEquals(
88 ref.getError().getTrace().replace("\t", " ").trim(),
89 test.getError().getTrace().replace("\t", " ").trim());
90 assertEquals(ref.getError().getScreenshot().getTimeMillis(),
91 test.getError().getScreenshot().getTimeMillis());
92 assertEquals(ref.getError().getScreenshot().getFileName(), test.getError().getScreenshot().getFileName());
93 }
94
95 assertEquals(ref.getBefore() == null, test.getBefore() == null);
96 if (ref.getBefore() != null) {
97 assertStepsEqual(ref.getBefore().getSteps(), test.getBefore().getSteps());
98 }
99
100 assertEquals(ref.getAttributes().length, test.getAttributes().length);
101
102 for (int i = 0; i < ref.getAttributes().length; ++i) {
103
104 final Attribute refAttribute = ref.getAttributes()[i];
105 final Attribute testAttribute = test.getAttributes()[i];
106
107 assertSame(refAttribute.getScope(), testAttribute.getScope());
108 assertEquals(refAttribute.getName(), testAttribute.getName());
109 assertEquals(refAttribute.getValue(), testAttribute.getValue());
110 }
111
112 assertIntentsEqual(ref.getIntents(), test.getIntents());
113
114 assertEquals(ref.getDone() == null, test.getDone() == null);
115 if (ref.getDone() != null) {
116 assertEquals(ref.getDone().getTimeMillis(), test.getDone().getTimeMillis());
117 assertEquals(ref.getDone().getMessage(), test.getDone().getMessage());
118 }
119 }
120
121 private static void assertIntentsEqual(
122 final Intent[] refIntents,
123 final Intent[] testIntents
124 ) {
125
126 assertEquals(refIntents.length, testIntents.length);
127
128 for (int i = 0; i < refIntents.length; ++i) {
129
130 final Intent refIntent = refIntents[i];
131 final Intent testIntent = testIntents[i];
132
133 assertEquals(refIntent.getTimeMillis(), testIntent.getTimeMillis());
134 assertEquals(refIntent.getTitle(), testIntent.getTitle());
135 assertEquals(refIntent.getSteps().length, testIntent.getSteps().length);
136 assertSame(refIntent.getGroup() == null, testIntent.getGroup() == null);
137
138 if (refIntent.getGroup() != null) {
139
140 final Group refGroup = refIntent.getGroup();
141 final Group testGroup = testIntent.getGroup();
142
143 assertEquals(refIntent.getTitle(), refGroup.getName());
144 assertEquals(refIntent.getTimeMillis(), refGroup.getBeginAtMs());
145
146 assertEquals(refGroup.getBeginAtMs(), testGroup.getBeginAtMs());
147 assertEquals(refGroup.getEndAtMs(), testGroup.getEndAtMs());
148 assertEquals(refGroup.getName(), testGroup.getName());
149
150 assertIntentsEqual(refGroup.getIntents(), testGroup.getIntents());
151
152 } else if (refIntent.getStatus() != null) {
153
154 final Status refStatus = refIntent.getStatus();
155 final Status testStatus = testIntent.getStatus();
156
157 assertEquals(refIntent.getTitle(), refStatus.getLabel());
158
159 assertEquals(refStatus.getLabel(), testStatus.getLabel());
160
161 } else {
162
163 assertStepsEqual(refIntent.getSteps(), testIntent.getSteps());
164 }
165 }
166 }
167
168 private static void assertStepsEqual(
169 final Step[] refSteps,
170 final Step[] testSteps
171 ) {
172
173 assertEquals(refSteps.length, testSteps.length);
174
175 for (int j = 0; j < refSteps.length; ++j) {
176
177 final Step refStep = refSteps[j];
178 final Step testStep = testSteps[j];
179
180 assertEquals(refStep.getNamespace(), testStep.getNamespace());
181 assertEquals(refStep.getFileName(), testStep.getFileName());
182 assertEquals(refStep.getLabel(), testStep.getLabel());
183 assertEquals(refStep.getLocator() == null, testStep.getLocator() == null);
184 if (refStep.getLocator() != null) {
185 assertSame(refStep.getLocator().getType(), testStep.getLocator().getType());
186 assertEquals(refStep.getLocator().getValue(), testStep.getLocator().getValue());
187 }
188 assertEquals(refStep.getMessage(), testStep.getMessage());
189 assertEquals(refStep.getName(), testStep.getName());
190 assertSame(refStep.getResultType(), testStep.getResultType());
191 assertEquals(refStep.getSeconds(), testStep.getSeconds());
192 assertSame(refStep.getScope(), testStep.getScope());
193 assertEquals(refStep.getTimeMillis(), testStep.getTimeMillis());
194 assertEquals(refStep.getScript(), testStep.getScript());
195 assertSame(refStep.getType(), testStep.getType());
196 assertEquals(refStep.getUrl(), testStep.getUrl());
197 assertEquals(refStep.getValue(), testStep.getValue());
198 }
199 }
200
201 public static Stream<Arguments> logFiles() throws IOException {
202
203 final List<Arguments> arguments = newArrayList();
204
205
206
207 scanLogFiles(new File("src/test/guixer_out_samples"), arguments);
208
209
210
211 for (final File file : new File("src/test/log_samples").listFiles(file
212 -> file.getName().startsWith("test-") && file.getName().endsWith(".log"))) {
213
214 final String timeMillis = extractTimeMillis(file);
215
216 arguments.add(Arguments.of(timeMillis, file));
217 }
218
219 return arguments.stream();
220 }
221
222 private static void scanLogFiles(
223 final File dir,
224 final Collection<Arguments> arguments
225 ) throws IOException {
226
227 for (final File file : dir.listFiles()) {
228
229 if (file.isFile() && file.getName().equals("test.log")) {
230
231 arguments.add(Arguments.of(dir.getName(), dir));
232
233 } else if (file.isDirectory()) {
234
235 scanLogFiles(file, arguments);
236 }
237 }
238 }
239
240 private static String extractTimeMillis(
241 final File logFile
242 ) throws IOException {
243
244 for (final String line : FileUtils.readLines(logFile, UTF_8)) {
245
246 if (line.startsWith("timeMillis: ")) {
247
248 return substringAfter(line, ": ");
249 }
250 }
251
252 throw new IllegalStateException("Cannot find line: \"timeMillis: xxx\"");
253 }
254
255 public static void assertLogEquals(
256 final Log ref,
257 final Log test
258 ) {
259 assertEquals(ref.getGuixerVersion(), test.getGuixerVersion());
260 assertEquals(ref.getTimeMillis(), test.getTimeMillis());
261 assertEquals(ref.getTestClassName(), test.getTestClassName());
262 assertEquals(ref.getTestClassSimpleName(), test.getTestClassSimpleName());
263 assertEquals(ref.getTestMethodName(), test.getTestMethodName());
264 assertEquals(ref.getTestClassName(), test.getTestClassName());
265 assertEquals(ref.getScenario(), test.getScenario());
266 assertEquals(ref.getSuccessCount(), test.getSuccessCount());
267 assertEquals(ref.getFailureCount(), test.getFailureCount());
268 assertEquals(ref.isInError(), test.isInError());
269 assertEquals(ref.getRawBytes().length == 0, test.getRawBytes().length == 0);
270 assertEquals(ref.getDateAsString() == null, test.getDateAsString() == null);
271
272 if (ref.getDate() != null && test.getDate() != null) {
273 assertEquals(ref.getDate().withZone(UTC), test.getDate().withZone(UTC));
274 }
275 assertEquals(ref.getSuccessCount(), test.getSuccessCount());
276 assertEquals(ref.getFailureCount(), test.getFailureCount());
277 assertEquals(ref.getAttributes().length, test.getAttributes().length);
278 assertEquals(ref.getLogLines().length, test.getLogLines().length);
279
280 for (int i = 0; i < ref.getAttributes().length; ++i) {
281
282 assertLogLineEquals(ref.getAttributes()[i], test.getAttributes()[i]);
283 }
284
285 for (int i = 0; i < ref.getLogLines().length; ++i) {
286
287 assertLogLineEquals(ref.getLogLines()[i], test.getLogLines()[i]);
288 }
289 }
290
291 private static void assertLogLineEquals(
292 final LogLine ref,
293 final LogLine test
294 ) {
295
296 assertSame(ref.getType(), test.getType());
297 assertEquals(ref.getClass(), test.getClass());
298 assertEquals(ref.getTimeMillis(), test.getTimeMillis());
299 assertRawTextEquals(ref.getType(), ref.getRawText(), test.getRawText());
300 }
301
302 private static void assertRawTextEquals(
303 final Type type,
304 final String ref,
305 final String test
306 ) {
307
308 if (ref.startsWith("type:") && test.startsWith("sendKeys:")) {
309
310 assertEquals(
311 substringAfter(ref, ":").replace("'", "").replace("\"", ""),
312 substringAfter(test, ":").replace("'", "").replace("\"", ""),
313 ref);
314
315 } else if (type == Type.SEND_KEYS) {
316
317 assertEquals(
318 ref.replace("'", "").replace("\"", ""),
319 test.replace("'", "").replace("\"", ""));
320
321 } else {
322
323 assertEquals(ref, test);
324 }
325 }
326 }