1 package org.e2etrace.trace;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.io.IOException;
20 import java.io.StringWriter;
21
22 import org.e2etrace.formatter.ITraceFormatter;
23 import org.e2etrace.formatter.PlainTextTraceFormatter;
24 import org.e2etrace.trace.DefaultTraceSession;
25 import org.e2etrace.trace.DefaultTraceStepFactory;
26 import org.e2etrace.trace.ITraceStep;
27 import org.e2etrace.trace.MethodTraceStepId;
28 import org.e2etrace.trace.SimpleTraceStepId;
29
30 import junit.framework.TestCase;
31
32
33
34
35
36
37
38
39
40 public class DefaultTraceSessionTest extends TestCase {
41
42 public static void main(String[] args) {
43 junit.textui.TestRunner.run(DefaultTraceSessionTest.class);
44 }
45
46
47
48
49
50
51
52 public void testMeasureDuration() throws InterruptedException, IOException {
53 DefaultTraceSession ts;
54 ITraceStep step;
55
56 ts = new DefaultTraceSession("testMeasureDuration", new DefaultTraceStepFactory(
57 new MockTimerFactory(new long[] { 40, 20 })));
58
59 ts.enterStep("1");
60 ts.enterStep("2");
61 ts.leaveStep("2");
62 ts.leaveStep("1");
63
64
65
66
67 assertEquals(40, ts.getDuration());
68
69
70
71
72 step = ts.getRootStep();
73
74 assertEquals(ts.getDuration(), step.getDuration());
75
76
77 step = step.getChildren()[0];
78 assertEquals(20, step.getIsolatedDuration());
79
80 }
81
82
83
84
85 public void testOmitLeaveStep() {
86 DefaultTraceSession ts;
87 ITraceStep step;
88
89 ts = new DefaultTraceSession("testOmitLeaveStep", new DefaultTraceStepFactory(
90 new MockTimerFactory(new long[] { 110, 70, 20 })));
91
92 ts.enterStep("1");
93 ts.enterStep("2");
94 ts.enterStep("3");
95
96
97
98 ts.leaveStep("1");
99
100 assertEquals(110, ts.getDuration());
101
102 step = ts.getRootStep().getChildren()[0];
103 assertEquals(40, step.getIsolatedDuration());
104
105 step = step.getChildren()[0];
106 assertEquals(50, step.getIsolatedDuration());
107
108 step = step.getChildren()[0];
109 assertEquals(20, step.getIsolatedDuration());
110 }
111
112
113
114
115
116 public void testSwitchOffTracing() {
117 DefaultTraceSession ts;
118 MockTraceConfig tc;
119
120 tc = new MockTraceConfig();
121 tc.setTraceEnabled(false);
122
123 ts = new DefaultTraceSession("testUsingConfig", new DefaultTraceStepFactory(
124 new MockTimerFactory(new long[] { 40, 20 })));
125 ts.setConfig(tc);
126
127 ts.enterStep("1");
128 ts.enterStep("2");
129 ts.leaveStep("2");
130 ts.leaveStep("1");
131
132
133 assertEquals(0, ts.getDuration());
134
135
136 assertEquals(0, ts.getRootStep().getChildren().length);
137
138 }
139
140
141
142
143
144
145 public void testSwitchOffIds() {
146 DefaultTraceSession ts;
147 ITraceStep step;
148 MockTraceConfig tc;
149
150
151
152 tc = new MockTraceConfig();
153 tc.setTraceEnabledForId(new SimpleTraceStepId("1"), false);
154
155 ts = new DefaultTraceSession("testUsingConfig", new DefaultTraceStepFactory(
156 new MockTimerFactory(new long[] { 60, 20 })));
157 ts.setConfig(tc);
158
159 ts.enterStep("1");
160 ts.enterStep("2");
161 ts.enterStep("3");
162 ts.leaveStep("3");
163 ts.leaveStep("2");
164 ts.leaveStep("1");
165
166
167
168
169
170
171 assertEquals(1, ts.getRootStep().getChildren().length);
172 assertEquals(60, ts.getDuration());
173
174 step = ts.getRootStep().getChildren()[0];
175 assertEquals("2", step.getId().asString());
176 assertEquals(40, step.getIsolatedDuration());
177 assertEquals(ts.getRootStep(), step.getParent());
178
179
180
181 tc = new MockTraceConfig();
182 tc.setTraceEnabledForId(new SimpleTraceStepId("2"), false);
183
184 ts = new DefaultTraceSession("testUsingConfig", new DefaultTraceStepFactory(
185 new MockTimerFactory(new long[] { 60, 20 })));
186 ts.setConfig(tc);
187
188 ts.enterStep("1");
189 ts.enterStep("2");
190 ts.enterStep("3");
191 ts.leaveStep("3");
192 ts.leaveStep("2");
193 ts.leaveStep("1");
194
195
196
197
198
199
200 assertEquals(1, ts.getRootStep().getChildren().length);
201 assertEquals(60, ts.getDuration());
202
203 step = ts.getRootStep().getChildren()[0];
204 assertEquals("1", step.getId().asString());
205 assertEquals(40, step.getIsolatedDuration());
206 assertEquals(ts.getRootStep(), step.getParent());
207 assertEquals(1, step.getChildren().length);
208
209 }
210
211
212
213
214
215
216
217
218
219
220
221 public void testMeasureAfterAddChildren() {
222 DefaultTraceSession ts1, ts2;
223
224
225
226 ts1 = new DefaultTraceSession("testMeasureAfterAddChildren-1",
227 new DefaultTraceStepFactory(new MockTimerFactory(new long[] { 40, 20 })));
228
229 ts1.enterStep("1");
230 ts1.enterStep("2");
231 ts1.leaveStep("2");
232 ts1.leaveStep("1");
233
234 ts2 = new DefaultTraceSession("testMeasureAfterAddChildren-2",
235 new DefaultTraceStepFactory(new MockTimerFactory(new long[] { 40, 20 })));
236
237 ts2.enterStep("1");
238 ts2.enterStep("2");
239 ts2.leaveStep("2");
240 ts2.leaveStep("1");
241
242
243 ts1.getRootStep().addChild(ts2.getRootStep());
244
245
246
247 assertEquals(80, ts1.getDuration());
248
249
250
251 ts2 = new DefaultTraceSession("testMeasureAfterAddChildren-2",
252 new DefaultTraceStepFactory(new MockTimerFactory(new long[] { 40, 20 })));
253
254 ts2.enterStep("1");
255 ts2.enterStep("2");
256 ts2.leaveStep("2");
257 ts2.leaveStep("1");
258
259 ts1 = new DefaultTraceSession("testMeasureAfterAddChildren-1",
260 new DefaultTraceStepFactory(new MockTimerFactory(new long[] { 40, 20 })));
261
262 ts1.enterStep("1");
263 ts1.enterStep("2");
264 ts1.leaveStep("2");
265 ts1.getCurrentStep().addChild(ts2.getRootStep());
266 ts1.leaveStep("1");
267
268
269
270
271 assertEquals(40, ts1.getDuration());
272
273
274
275
276 assertEquals(-1, ts1.getRootStep().getChildren()[0].getIsolatedDuration());
277
278 }
279
280
281
282
283
284
285
286 public void testMultipleMethodCalls() {
287 DefaultTraceSession ts;
288
289 ts = new DefaultTraceSession("testMultipleMethodCalls", new DefaultTraceStepFactory(
290 new MockTimerFactory(new long[] { 100, 20, 20, 20, 20, 20 })));
291
292 ts.enterStep(new MethodTraceStepId(this.getClass(), "method1"));
293
294 for (int i = 0; i < 5; i++) {
295 ts.enterStep(new MethodTraceStepId(this.getClass(), "method2"));
296 ts.leaveStep(new MethodTraceStepId(this.getClass(), "method2"));
297 }
298
299 ts.leaveStep(new MethodTraceStepId(this.getClass(), "method1"));
300
301
302
303
304
305
306 assertEquals(100, ts.getDuration());
307 assertEquals(5, ts.getRootStep().getChildren()[0].getChildren().length);
308 }
309
310
311
312
313
314
315
316 public void testRecursiveMethodCalls() {
317 DefaultTraceSession ts;
318 ITraceStep step;
319
320 ts = new DefaultTraceSession("testMultipleMethodCalls", new DefaultTraceStepFactory(
321 new MockTimerFactory(new long[] { 100, 20, 20, 20, 20, 20 })));
322
323 ts.enterStep(new MethodTraceStepId(this.getClass(), "method1"));
324
325 for (int i = 0; i < 5; i++) {
326 ts.enterStep(new MethodTraceStepId(this.getClass(), "method2"));
327 }
328 for (int i = 0; i < 5; i++) {
329 ts.leaveStep(new MethodTraceStepId(this.getClass(), "method2"));
330 }
331
332 ts.leaveStep(new MethodTraceStepId(this.getClass(), "method1"));
333
334
335
336
337
338
339 assertEquals(100, ts.getDuration());
340
341 step = ts.getRootStep().getChildren()[0];
342 for (int i = 0; i < 5; i++) {
343 step = step.getChildren()[0];
344 assertEquals(20, step.getDuration());
345
346 }
347
348 }
349
350
351
352
353
354
355
356 private void printTraceTree(DefaultTraceSession ts) {
357 ITraceFormatter tf = new PlainTextTraceFormatter();
358 StringWriter testOutput = new StringWriter();
359
360 try {
361 tf.format(ts, testOutput);
362 } catch (IOException e) {
363 e.printStackTrace();
364 }
365
366 System.out.println(testOutput.toString());
367
368 }
369 }