tmf: Fix missing dispose of traces in TmfTraceTest and TmfExperimentTest
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core.tests / src / org / eclipse / tracecompass / tmf / core / tests / trace / TmfExperimentTest.java
CommitLineData
d18dd09b 1/*******************************************************************************
60ae41e1 2 * Copyright (c) 2009, 2014 Ericsson
9b749023 3 *
d18dd09b
ASL
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
9b749023 8 *
d18dd09b
ASL
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
0316808c 11 * Francois Chouinard - Adjusted for new Trace Model
6e1886bc 12 * Alexandre Montplaisir - Port to JUnit4
ea271da6 13 * Patrick Tasse - Updated for rank in experiment location
d18dd09b
ASL
14 *******************************************************************************/
15
2bdf0193 16package org.eclipse.tracecompass.tmf.core.tests.trace;
d18dd09b 17
6e1886bc
AM
18import static org.junit.Assert.assertEquals;
19import static org.junit.Assert.assertFalse;
07ef7847 20import static org.junit.Assert.assertNotNull;
6e1886bc
AM
21import static org.junit.Assert.assertNull;
22import static org.junit.Assert.assertTrue;
23
d18dd09b
ASL
24import java.io.File;
25import java.io.IOException;
26import java.net.URISyntaxException;
27import java.net.URL;
28import java.util.Vector;
29
d18dd09b
ASL
30import org.eclipse.core.runtime.FileLocator;
31import org.eclipse.core.runtime.Path;
b6f14576 32import org.eclipse.tracecompass.internal.tmf.core.component.TmfProviderManager;
5c5fa260
AM
33import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperimentContext;
34import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperimentLocation;
2bdf0193
AM
35import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
36import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
37import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
38import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest;
2bdf0193 39import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType;
5c5fa260 40import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
2bdf0193
AM
41import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
42import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
43import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
44import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
45import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
46import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
47import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
b8585c7c 48import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
5c5fa260 49import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
2bdf0193
AM
50import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
51import org.eclipse.tracecompass.tmf.core.trace.location.TmfLongLocation;
52import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestExperimentAnalysis;
53import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfExperimentStub;
54import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
b6f14576 55import org.junit.After;
6e1886bc
AM
56import org.junit.Before;
57import org.junit.Test;
d18dd09b
ASL
58
59/**
0316808c 60 * Test suite for the TmfExperiment class (single trace).
d18dd09b 61 */
cad06250 62@SuppressWarnings("javadoc")
6e1886bc 63public class TmfExperimentTest {
d18dd09b 64
0316808c
FC
65 // ------------------------------------------------------------------------
66 // Attributes
67 // ------------------------------------------------------------------------
68
d18dd09b
ASL
69 private static final String EXPERIMENT = "MyExperiment";
70 private static int NB_EVENTS = 10000;
0316808c 71 private static int BLOCK_SIZE = 1000;
d18dd09b 72
6e1886bc
AM
73 private static final double DELTA = 1e-15;
74
6256d8ad
AM
75 private ITmfTrace[] fTestTraces;
76 private TmfExperimentStub fExperiment;
d18dd09b
ASL
77
78 private static byte SCALE = (byte) -3;
79
80 // ------------------------------------------------------------------------
81 // Housekeeping
82 // ------------------------------------------------------------------------
83
6256d8ad 84 private synchronized ITmfTrace[] setupTrace(final String path) {
9e0640dc
FC
85 if (fTestTraces == null) {
86 fTestTraces = new ITmfTrace[1];
25e48683
FC
87 try {
88 final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path), null);
89 final File test = new File(FileLocator.toFileURL(location).toURI());
ab186fbb 90 final TmfTraceStub trace = new TmfTraceStub(test.getPath(), 0, true, null);
9e0640dc 91 fTestTraces[0] = trace;
b4f71e4a
FC
92 } catch (final TmfTraceException e) {
93 e.printStackTrace();
25e48683
FC
94 } catch (final URISyntaxException e) {
95 e.printStackTrace();
96 } catch (final IOException e) {
97 e.printStackTrace();
98 }
99 }
9e0640dc 100 return fTestTraces;
d18dd09b
ASL
101 }
102
9e0640dc 103 private synchronized void setupExperiment() {
20658947 104 if (fExperiment == null) {
6256d8ad 105 fExperiment = new TmfExperimentStub(EXPERIMENT, fTestTraces, BLOCK_SIZE);
9e0640dc 106 fExperiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true);
20658947 107 }
d18dd09b
ASL
108 }
109
6e1886bc
AM
110 @Before
111 public void setUp() {
9c4d52ee 112 setupTrace(TmfTestTrace.A_TEST_10K.getFullPath());
25e48683
FC
113 setupExperiment();
114 }
d18dd09b 115
b6f14576
PT
116 @After
117 public void tearDown() {
118 if (fExperiment != null) {
119 fExperiment.dispose();
120 }
121 assertEquals(0, TmfProviderManager.getProviders(ITmfEvent.class).length);
122 }
123
d18dd09b
ASL
124 // ------------------------------------------------------------------------
125 // Constructor
126 // ------------------------------------------------------------------------
127
6e1886bc 128 @Test
9e0640dc 129 public void testSimpleTmfExperimentConstructor() {
4178260e
AM
130 TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT,
131 fTestTraces, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc
FC
132 assertEquals("GetId", EXPERIMENT, experiment.getName());
133 assertEquals("GetCacheSize", TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, experiment.getCacheSize());
134 experiment.dispose();
135
4178260e
AM
136 experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT, null,
137 TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc
FC
138 experiment.dispose();
139 }
140
6e1886bc 141 @Test
9e0640dc 142 public void testNormalTmfExperimentConstructor() {
25e48683 143 assertEquals("GetId", EXPERIMENT, fExperiment.getName());
d18dd09b
ASL
144 assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
145
07671572
FC
146 final long nbExperimentEvents = fExperiment.getNbEvents();
147 assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
148
fa62dc1d 149 final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
82e04272
FC
150 assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
151
25e48683 152 final TmfTimeRange timeRange = fExperiment.getTimeRange();
d18dd09b
ASL
153 assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
154 assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
25e48683 155 }
d18dd09b 156
b3dd2736
GB
157 // ------------------------------------------------------------------------
158 // Experiment setup
159 // ------------------------------------------------------------------------
160
161 @Test
162 public void testExperimentInitialization() {
163 /*
164 * Calling default constructor, then init should be equivalent to
165 * calling the full constructor
166 */
167
4178260e 168 TmfExperimentStub experiment = new TmfExperimentStub(EXPERIMENT, fTestTraces, 5000);
b3dd2736
GB
169 experiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true);
170
171 assertEquals("GetId", EXPERIMENT, fExperiment.getName());
172 assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
173
174 final long nbExperimentEvents = fExperiment.getNbEvents();
175 assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
176
fa62dc1d 177 final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
b3dd2736
GB
178 assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
179
180 final TmfTimeRange timeRange = fExperiment.getTimeRange();
181 assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
182 assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
b6f14576
PT
183
184 experiment.dispose();
b3dd2736
GB
185 }
186
9e0640dc
FC
187 // ------------------------------------------------------------------------
188 // getTimestamp
189 // ------------------------------------------------------------------------
190
6e1886bc 191 @Test
54a7a54c 192 public void testGetTimestamp() {
17324c9a
FC
193 assertEquals("getTimestamp", new TmfTimestamp( 1, (byte) -3), fExperiment.getTimestamp( 0));
194 assertEquals("getTimestamp", new TmfTimestamp( 2, (byte) -3), fExperiment.getTimestamp( 1));
195 assertEquals("getTimestamp", new TmfTimestamp( 11, (byte) -3), fExperiment.getTimestamp( 10));
196 assertEquals("getTimestamp", new TmfTimestamp( 101, (byte) -3), fExperiment.getTimestamp( 100));
197 assertEquals("getTimestamp", new TmfTimestamp( 1001, (byte) -3), fExperiment.getTimestamp(1000));
198 assertEquals("getTimestamp", new TmfTimestamp( 2001, (byte) -3), fExperiment.getTimestamp(2000));
199 assertEquals("getTimestamp", new TmfTimestamp( 2501, (byte) -3), fExperiment.getTimestamp(2500));
200 assertEquals("getTimestamp", new TmfTimestamp(10000, (byte) -3), fExperiment.getTimestamp(9999));
9e0640dc
FC
201 assertNull("getTimestamp", fExperiment.getTimestamp(10000));
202 }
203
a51b2b9f 204 // ------------------------------------------------------------------------
8a6ff07f 205 // State system, statistics and modules methods
a51b2b9f
AM
206 // ------------------------------------------------------------------------
207
6e1886bc 208 @Test
8a6ff07f 209 public void testGetAnalysisModules() {
1d83ed07
AM
210 TmfExperiment experiment = fExperiment;
211 assertNotNull(experiment);
212
8a6ff07f 213 /* There should not be any modules at this point */
1d83ed07 214 Iterable<IAnalysisModule> modules = experiment.getAnalysisModules();
ff3f02c8 215 assertFalse(modules.iterator().hasNext());
6a6adab9
GB
216
217 /* Open the experiment, the modules should be populated */
1d83ed07
AM
218 experiment.traceOpened(new TmfTraceOpenedSignal(this, experiment, null));
219 modules = experiment.getAnalysisModules();
220 Iterable<TestExperimentAnalysis> testModules = TmfTraceUtils.getAnalysisModulesOfClass(experiment, TestExperimentAnalysis.class);
6a6adab9
GB
221 assertTrue(modules.iterator().hasNext());
222 assertTrue(testModules.iterator().hasNext());
a51b2b9f
AM
223 }
224
9e0640dc
FC
225 // ------------------------------------------------------------------------
226 // seekEvent by location
227 // ------------------------------------------------------------------------
228
6e1886bc 229 @Test
54a7a54c 230 public void testSeekBadLocation() {
cb8c854e 231 ITmfContext context = fExperiment.seekEvent(new TmfLongLocation(0L));
9e0640dc
FC
232 assertNull("seekEvent", context);
233 }
234
6e1886bc 235 @Test
54a7a54c 236 public void testSeekNoTrace() {
4178260e
AM
237 TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT,
238 null, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc 239 ITmfContext context = experiment.seekEvent((TmfExperimentLocation) null);
fa62dc1d 240 validateContextRanks(context);
9e0640dc
FC
241 experiment.dispose();
242 }
243
244 // ------------------------------------------------------------------------
245 // seekEvent on ratio
246 // ------------------------------------------------------------------------
247
6e1886bc 248 @Test
54a7a54c 249 public void testSeekEventOnRatio() {
9e0640dc
FC
250 // First event
251 ITmfContext context = fExperiment.seekEvent(0.0);
252 assertEquals("Context rank", 0, context.getRank());
253 ITmfEvent event = fExperiment.parseEvent(context);
254 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
255 assertEquals("Context rank", 0, context.getRank());
256
257 // Middle event
258 int midTrace = NB_EVENTS / 2;
259 context = fExperiment.seekEvent(0.5);
260 assertEquals("Context rank", midTrace, context.getRank());
261 event = fExperiment.parseEvent(context);
262 assertEquals("Event timestamp", midTrace + 1, event.getTimestamp().getValue());
263 assertEquals("Context rank", midTrace, context.getRank());
9b749023 264
9e0640dc
FC
265 // Last event
266 context = fExperiment.seekEvent(1.0);
267 assertEquals("Context rank", NB_EVENTS, context.getRank());
268 event = fExperiment.parseEvent(context);
269 assertNull("Event timestamp", event);
270 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 271
9e0640dc
FC
272 // Beyond last event
273 context = fExperiment.seekEvent(1.1);
274 assertEquals("Context rank", NB_EVENTS, context.getRank());
275 event = fExperiment.parseEvent(context);
276 assertNull("Event timestamp", event);
277 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 278
9e0640dc
FC
279 // Negative ratio
280 context = fExperiment.seekEvent(-0.5);
281 assertEquals("Context rank", 0, context.getRank());
282 event = fExperiment.parseEvent(context);
283 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
284 assertEquals("Context rank", 0, context.getRank());
285 }
286
6e1886bc 287 @Test
54a7a54c 288 public void testGetLocationRatio() {
9e0640dc
FC
289 // First event
290 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
291 double ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 292 assertEquals("getLocationRatio", 0.0, ratio, DELTA);
9e0640dc
FC
293
294 // Middle event
295 context = fExperiment.seekEvent(NB_EVENTS / 2);
296 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 297 assertEquals("getLocationRatio", (double) (NB_EVENTS / 2) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
298
299 // Last event
300 context = fExperiment.seekEvent(NB_EVENTS - 1);
301 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 302 assertEquals("getLocationRatio", (double) (NB_EVENTS - 1) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
303 }
304
17324c9a 305// @SuppressWarnings("rawtypes")
54a7a54c 306// public void testGetCurrentLocation() {
9e0640dc
FC
307// ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
308// ITmfLocation location = fExperiment.getCurrentLocation();
309// assertEquals("getCurrentLocation", location, context.getLocation());
310// }
311
d18dd09b 312 // ------------------------------------------------------------------------
0316808c 313 // seekEvent on rank
d18dd09b
ASL
314 // ------------------------------------------------------------------------
315
6e1886bc 316 @Test
54a7a54c 317 public void testSeekRankOnCacheBoundary() {
0316808c 318 long cacheSize = fExperiment.getCacheSize();
9b635e61 319
0316808c
FC
320 // On lower bound, returns the first event (TS = 1)
321 ITmfContext context = fExperiment.seekEvent(0);
322 assertEquals("Context rank", 0, context.getRank());
25e48683 323
c32744d6 324 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 325 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 326 assertEquals("Context rank", 1, context.getRank());
25e48683 327
0316808c
FC
328 // Position trace at event rank [cacheSize]
329 context = fExperiment.seekEvent(cacheSize);
330 assertEquals("Context rank", cacheSize, context.getRank());
25e48683 331
c32744d6 332 event = fExperiment.getNext(context);
0316808c
FC
333 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
334 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 335
0316808c
FC
336 // Position trace at event rank [4 * cacheSize]
337 context = fExperiment.seekEvent(4 * cacheSize);
338 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 339
c32744d6 340 event = fExperiment.getNext(context);
0316808c
FC
341 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
342 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
343 }
344
6e1886bc 345 @Test
54a7a54c 346 public void testSeekRankNotOnCacheBoundary() {
0316808c 347 long cacheSize = fExperiment.getCacheSize();
25e48683 348
0316808c
FC
349 // Position trace at event rank 9
350 ITmfContext context = fExperiment.seekEvent(9);
351 assertEquals("Context rank", 9, context.getRank());
25e48683 352
c32744d6 353 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 354 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 355 assertEquals("Context rank", 10, context.getRank());
d18dd09b 356
0316808c
FC
357 // Position trace at event rank [cacheSize - 1]
358 context = fExperiment.seekEvent(cacheSize - 1);
359 assertEquals("Context rank", cacheSize - 1, context.getRank());
25e48683 360
c32744d6 361 event = fExperiment.getNext(context);
0316808c
FC
362 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
363 assertEquals("Context rank", cacheSize, context.getRank());
d18dd09b 364
0316808c
FC
365 // Position trace at event rank [cacheSize + 1]
366 context = fExperiment.seekEvent(cacheSize + 1);
367 assertEquals("Context rank", cacheSize + 1, context.getRank());
25e48683 368
c32744d6 369 event = fExperiment.getNext(context);
0316808c
FC
370 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
371 assertEquals("Context rank", cacheSize + 2, context.getRank());
d18dd09b 372
25e48683 373 // Position trace at event rank 4500
0316808c
FC
374 context = fExperiment.seekEvent(4500);
375 assertEquals("Context rank", 4500, context.getRank());
25e48683 376
c32744d6 377 event = fExperiment.getNext(context);
d18dd09b 378 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 379 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
380 }
381
6e1886bc 382 @Test
54a7a54c 383 public void testSeekRankOutOfScope() {
25e48683 384 // Position trace at beginning
0316808c 385 ITmfContext context = fExperiment.seekEvent(-1);
9b635e61 386 assertEquals("Event rank", 0, context.getRank());
25e48683 387
c32744d6 388 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 389 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 390 assertEquals("Context rank", 1, context.getRank());
d18dd09b 391
25e48683 392 // Position trace at event passed the end
0316808c
FC
393 context = fExperiment.seekEvent(NB_EVENTS);
394 assertEquals("Context rank", NB_EVENTS, context.getRank());
395
c32744d6 396 event = fExperiment.getNext(context);
0316808c
FC
397 assertNull("Event", event);
398 assertEquals("Context rank", NB_EVENTS, context.getRank());
d18dd09b
ASL
399 }
400
401 // ------------------------------------------------------------------------
402 // seekEvent on timestamp
403 // ------------------------------------------------------------------------
404
6e1886bc 405 @Test
54a7a54c 406 public void testSeekTimestampOnCacheBoundary() {
0316808c 407 long cacheSize = fExperiment.getCacheSize();
25e48683 408
0316808c 409 // Position trace at event rank 0
065cc19b 410 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE));
0316808c 411 assertEquals("Context rank", 0, context.getRank());
25e48683 412
c32744d6 413 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 414 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 415 assertEquals("Context rank", 1, context.getRank());
25e48683 416
0316808c 417 // Position trace at event rank [cacheSize]
065cc19b 418 context = fExperiment.seekEvent(new TmfTimestamp(cacheSize + 1, SCALE));
0316808c 419 assertEquals("Event rank", cacheSize, context.getRank());
25e48683 420
c32744d6 421 event = fExperiment.getNext(context);
0316808c
FC
422 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
423 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 424
0316808c 425 // Position trace at event rank [4 * cacheSize]
065cc19b 426 context = fExperiment.seekEvent(new TmfTimestamp(4 * cacheSize + 1, SCALE));
0316808c 427 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 428
c32744d6 429 event = fExperiment.getNext(context);
0316808c
FC
430 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
431 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
432 }
433
6e1886bc 434 @Test
54a7a54c 435 public void testSeekTimestampNotOnCacheBoundary() {
0316808c 436 // Position trace at event rank 1 (TS = 2)
065cc19b 437 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(2, SCALE));
0316808c 438 assertEquals("Context rank", 1, context.getRank());
25e48683 439
c32744d6 440 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 441 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
0316808c 442 assertEquals("Context rank", 2, context.getRank());
d18dd09b 443
0316808c 444 // Position trace at event rank 9 (TS = 10)
065cc19b 445 context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE));
0316808c 446 assertEquals("Context rank", 9, context.getRank());
25e48683 447
c32744d6 448 event = fExperiment.getNext(context);
d18dd09b 449 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 450 assertEquals("Context rank", 10, context.getRank());
d18dd09b 451
0316808c 452 // Position trace at event rank 999 (TS = 1000)
065cc19b 453 context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE));
0316808c 454 assertEquals("Context rank", 999, context.getRank());
25e48683 455
c32744d6 456 event = fExperiment.getNext(context);
d18dd09b 457 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
0316808c 458 assertEquals("Context rank", 1000, context.getRank());
d18dd09b 459
0316808c 460 // Position trace at event rank 1001 (TS = 1002)
065cc19b 461 context = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE));
0316808c 462 assertEquals("Context rank", 1001, context.getRank());
25e48683 463
c32744d6 464 event = fExperiment.getNext(context);
d18dd09b 465 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
0316808c 466 assertEquals("Context rank", 1002, context.getRank());
d18dd09b 467
0316808c 468 // Position trace at event rank 4500 (TS = 4501)
065cc19b 469 context = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE));
0316808c 470 assertEquals("Context rank", 4500, context.getRank());
25e48683 471
c32744d6 472 event = fExperiment.getNext(context);
d18dd09b 473 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 474 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
475 }
476
6e1886bc 477 @Test
54a7a54c 478 public void testSeekTimestampOutOfScope() {
25e48683 479 // Position trace at beginning
065cc19b 480 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(-1, SCALE));
d18dd09b 481 assertEquals("Event rank", 0, context.getRank());
25e48683 482
c32744d6 483 ITmfEvent event = fExperiment.getNext(context);
d18dd09b
ASL
484 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
485 assertEquals("Event rank", 1, context.getRank());
486
25e48683 487 // Position trace at event passed the end
065cc19b 488 context = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE));
c32744d6 489 event = fExperiment.getNext(context);
0316808c 490 assertNull("Event location", event);
9b635e61 491 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
d18dd09b
ASL
492 }
493
494 // ------------------------------------------------------------------------
0316808c 495 // seekEvent by location (context rank is undefined)
d18dd09b
ASL
496 // ------------------------------------------------------------------------
497
6e1886bc 498 @Test
54a7a54c 499 public void testSeekLocationOnCacheBoundary() {
0316808c 500 long cacheSize = fExperiment.getCacheSize();
d18dd09b 501
0316808c
FC
502 // Position trace at event rank 0
503 ITmfContext tmpContext = fExperiment.seekEvent(0);
504 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 505
c32744d6 506 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 507 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
25e48683 508
c32744d6 509 event = fExperiment.getNext(context);
0316808c 510 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
d18dd09b 511
0316808c
FC
512 // Position trace at event rank 'cacheSize'
513 tmpContext = fExperiment.seekEvent(cacheSize);
514 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 515
c32744d6 516 event = fExperiment.getNext(context);
0316808c 517 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
25e48683 518
c32744d6 519 event = fExperiment.getNext(context);
0316808c 520 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
d18dd09b 521
0316808c
FC
522 // Position trace at event rank 4 * 'cacheSize'
523 tmpContext = fExperiment.seekEvent(4 * cacheSize);
524 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 525
c32744d6 526 event = fExperiment.getNext(context);
0316808c 527 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
25e48683 528
c32744d6 529 event = fExperiment.getNext(context);
0316808c 530 assertEquals("Event timestamp", 4 * cacheSize + 2, event.getTimestamp().getValue());
d18dd09b
ASL
531 }
532
6e1886bc 533 @Test
54a7a54c 534 public void testSeekLocationNotOnCacheBoundary() {
0316808c 535 long cacheSize = fExperiment.getCacheSize();
25e48683 536
0316808c
FC
537 // Position trace at event 'cacheSize' - 1
538 ITmfContext tmpContext = fExperiment.seekEvent(cacheSize - 1);
539 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
d18dd09b 540
c32744d6 541 ITmfEvent event = fExperiment.getNext(context);
0316808c 542 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
25e48683 543
c32744d6 544 event = fExperiment.getNext(context);
0316808c 545 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 546
0316808c
FC
547 // Position trace at event rank 2 * 'cacheSize' - 1
548 tmpContext = fExperiment.seekEvent(2 * cacheSize - 1);
549 context = fExperiment.seekEvent(tmpContext.getLocation());
550 context = fExperiment.seekEvent(2 * cacheSize - 1);
25e48683 551
c32744d6 552 event = fExperiment.getNext(context);
0316808c 553 assertEquals("Event timestamp", 2 * cacheSize, event.getTimestamp().getValue());
25e48683 554
c32744d6 555 event = fExperiment.getNext(context);
0316808c 556 assertEquals("Event timestamp", 2 * cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 557
25e48683 558 // Position trace at event rank 4500
0316808c
FC
559 tmpContext = fExperiment.seekEvent(4500);
560 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 561
c32744d6 562 event = fExperiment.getNext(context);
d18dd09b 563 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
25e48683 564
c32744d6 565 event = fExperiment.getNext(context);
0316808c 566 assertEquals("Event timestamp", 4502, event.getTimestamp().getValue());
d18dd09b
ASL
567 }
568
6e1886bc 569 @Test
54a7a54c 570 public void testSeekLocationOutOfScope() {
25e48683 571 // Position trace at beginning
1e1bef82 572 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
25e48683 573
c32744d6 574 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 575 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
d18dd09b 576 }
25e48683 577
9b635e61 578 // ------------------------------------------------------------------------
17324c9a 579 // getNext - updates the context
9b635e61
FC
580 // ------------------------------------------------------------------------
581
54a7a54c 582 private static void validateContextRanks(ITmfContext context) {
17324c9a
FC
583 assertTrue("Experiment context type", context instanceof TmfExperimentContext);
584 TmfExperimentContext ctx = (TmfExperimentContext) context;
9b635e61 585
07ef7847 586 int nbTraces = ctx.getNbTraces();
17324c9a
FC
587
588 // expRank = sum(trace ranks) - nbTraces + 1 (if lastTraceRead != NO_TRACE)
589 long expRank = -nbTraces + ((ctx.getLastTrace() != TmfExperimentContext.NO_TRACE) ? 1 : 0);
590 for (int i = 0; i < nbTraces; i++) {
07ef7847
AM
591 ITmfContext subContext = ctx.getContext(i);
592 assertNotNull(subContext);
593 long rank = subContext.getRank();
17324c9a
FC
594 if (rank == -1) {
595 expRank = -1;
596 break;
597 }
598 expRank += rank;
599 }
600 assertEquals("Experiment context rank", expRank, ctx.getRank());
601 }
602
6e1886bc 603 @Test
54a7a54c 604 public void testGetNextAfteSeekingOnTS_1() {
9b635e61 605
17324c9a
FC
606 final long INITIAL_TS = 1;
607 final int NB_READS = 20;
608
609 // On lower bound, returns the first event (ts = 1)
065cc19b 610 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
611
612 validateContextRanks(context);
613
614 // Read NB_EVENTS
615 ITmfEvent event;
616 for (int i = 0; i < NB_READS; i++) {
c32744d6 617 event = fExperiment.getNext(context);
17324c9a
FC
618 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
619 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
9b635e61 620 }
17324c9a
FC
621
622 // Make sure we stay positioned
623 event = fExperiment.parseEvent(context);
624 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
625 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
626
627 validateContextRanks(context);
9b635e61
FC
628 }
629
6e1886bc 630 @Test
54a7a54c 631 public void testGetNextAfteSeekingOnTS_2() {
17324c9a
FC
632 final long INITIAL_TS = 2;
633 final int NB_READS = 20;
634
635 // On lower bound, returns the first event (ts = 2)
065cc19b 636 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
637
638 validateContextRanks(context);
639
640 // Read NB_EVENTS
641 ITmfEvent event;
642 for (int i = 0; i < NB_READS; i++) {
643 event = fExperiment.getNext(context);
644 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
645 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
646 }
647
648 // Make sure we stay positioned
649 event = fExperiment.parseEvent(context);
650 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
651 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
652
653 validateContextRanks(context);
654 }
655
6e1886bc 656 @Test
54a7a54c 657 public void testGetNextAfteSeekingOnTS_3() {
17324c9a
FC
658
659 final long INITIAL_TS = 500;
660 final int NB_READS = 20;
661
662 // On lower bound, returns the first event (ts = 500)
065cc19b 663 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
664
665 validateContextRanks(context);
666
667 // Read NB_EVENTS
668 ITmfEvent event;
669 for (int i = 0; i < NB_READS; i++) {
670 event = fExperiment.getNext(context);
671 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
672 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
673 }
674
675 // Make sure we stay positioned
676 event = fExperiment.parseEvent(context);
677 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
678 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
679
680 validateContextRanks(context);
681 }
682
6e1886bc 683 @Test
54a7a54c 684 public void testGetNextAfterSeekingOnRank_1() {
17324c9a
FC
685 final long INITIAL_RANK = 0L;
686 final int NB_READS = 20;
687
688 // On lower bound, returns the first event (rank = 0)
689 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
690
691 validateContextRanks(context);
692
693 // Read NB_EVENTS
694 ITmfEvent event;
695 for (int i = 0; i < NB_READS; i++) {
696 event = fExperiment.getNext(context);
697 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
698 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
699 }
700
701 // Make sure we stay positioned
702 event = fExperiment.parseEvent(context);
703 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
704 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
705
706 validateContextRanks(context);
707 }
708
6e1886bc 709 @Test
54a7a54c 710 public void testGetNextAfterSeekingOnRank_2() {
17324c9a
FC
711 final long INITIAL_RANK = 1L;
712 final int NB_READS = 20;
713
714 // On lower bound, returns the first event (rank = 0)
715 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
716
717 validateContextRanks(context);
718
719 // Read NB_EVENTS
720 ITmfEvent event;
721 for (int i = 0; i < NB_READS; i++) {
722 event = fExperiment.getNext(context);
723 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
724 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
725 }
726
727 // Make sure we stay positioned
728 event = fExperiment.parseEvent(context);
729 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
730 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
731
732 validateContextRanks(context);
733 }
734
6e1886bc 735 @Test
54a7a54c 736 public void testGetNextAfterSeekingOnRank_3() {
17324c9a
FC
737 final long INITIAL_RANK = 500L;
738 final int NB_READS = 20;
739
740 // On lower bound, returns the first event (rank = 0)
741 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
742
743 validateContextRanks(context);
744
745 // Read NB_EVENTS
746 ITmfEvent event;
747 for (int i = 0; i < NB_READS; i++) {
748 event = fExperiment.getNext(context);
749 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
750 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
751 }
752
753 // Make sure we stay positioned
754 event = fExperiment.parseEvent(context);
755 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
756 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
757
758 validateContextRanks(context);
759 }
760
6e1886bc 761 @Test
54a7a54c 762 public void testGetNextAfterSeekingOnLocation_1() {
1e1bef82 763 final ITmfLocation INITIAL_LOC = null;
17324c9a
FC
764 final long INITIAL_TS = 1;
765 final int NB_READS = 20;
766
767 // On lower bound, returns the first event (ts = 1)
768 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
769
770 validateContextRanks(context);
771
772 // Read NB_EVENTS
773 ITmfEvent event;
774 for (int i = 0; i < NB_READS; i++) {
775 event = fExperiment.getNext(context);
776 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
777 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
778 }
779
780 // Make sure we stay positioned
781 event = fExperiment.parseEvent(context);
782 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
783 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
784
785 validateContextRanks(context);
786 }
787
6e1886bc 788 @Test
54a7a54c 789 public void testGetNextAfterSeekingOnLocation_2() {
1e1bef82 790 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(1L).getLocation();
17324c9a
FC
791 final long INITIAL_TS = 2;
792 final int NB_READS = 20;
793
794 // On lower bound, returns the first event (ts = 2)
795 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
796
797 validateContextRanks(context);
798
799 // Read NB_EVENTS
800 ITmfEvent event;
801 for (int i = 0; i < NB_READS; i++) {
802 event = fExperiment.getNext(context);
803 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
804 }
805
806 // Make sure we stay positioned
807 event = fExperiment.parseEvent(context);
808 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
809
810 validateContextRanks(context);
811 }
812
6e1886bc 813 @Test
54a7a54c 814 public void testGetNextAfterSeekingOnLocation_3() {
1e1bef82 815 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(500L).getLocation();
17324c9a
FC
816 final long INITIAL_TS = 501;
817 final int NB_READS = 20;
818
819 // On lower bound, returns the first event (ts = 501)
820 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
821
822 validateContextRanks(context);
823
824 // Read NB_EVENTS
825 ITmfEvent event;
826 for (int i = 0; i < NB_READS; i++) {
827 event = fExperiment.getNext(context);
828 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
829 }
830
831 // Make sure we stay positioned
832 event = fExperiment.parseEvent(context);
833 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
834
835 validateContextRanks(context);
836 }
837
6e1886bc 838 @Test
54a7a54c 839 public void testGetNextLocation() {
17324c9a
FC
840 ITmfContext context1 = fExperiment.seekEvent(0);
841 fExperiment.getNext(context1);
d62bb185 842 ITmfLocation location = context1.getLocation();
17324c9a
FC
843 ITmfEvent event1 = fExperiment.getNext(context1);
844 ITmfContext context2 = fExperiment.seekEvent(location);
845 ITmfEvent event2 = fExperiment.getNext(context2);
846 assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
847 }
848
6e1886bc 849 @Test
54a7a54c 850 public void testGetNextEndLocation() {
17324c9a
FC
851 ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1);
852 fExperiment.getNext(context1);
d62bb185 853 ITmfLocation location = context1.getLocation();
17324c9a
FC
854 ITmfContext context2 = fExperiment.seekEvent(location);
855 ITmfEvent event = fExperiment.getNext(context2);
856 assertNull("Event", event);
857 }
54a7a54c 858
d18dd09b
ASL
859 // ------------------------------------------------------------------------
860 // processRequest
861 // ------------------------------------------------------------------------
862
6e1886bc 863 @Test
54a7a54c 864 public void testProcessRequestForNbEvents() throws InterruptedException {
d18dd09b 865 final int nbEvents = 1000;
ccf2bbb4 866 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b 867
25e48683 868 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 869 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 870 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 871 @Override
6256d8ad 872 public void handleData(final ITmfEvent event) {
25e48683
FC
873 super.handleData(event);
874 requestedEvents.add(event);
875 }
d18dd09b
ASL
876 };
877 fExperiment.sendRequest(request);
878 request.waitForCompletion();
879
880 assertEquals("nbEvents", nbEvents, requestedEvents.size());
881 assertTrue("isCompleted", request.isCompleted());
882 assertFalse("isCancelled", request.isCancelled());
883
884 // Ensure that we have distinct events.
25e48683 885 // Don't go overboard: we are not validating the stub!
20658947 886 for (int i = 0; i < nbEvents; i++) {
d18dd09b 887 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 888 }
d18dd09b 889 }
25e48683 890
6e1886bc 891 @Test
54a7a54c 892 public void testProcessRequestForAllEvents() throws InterruptedException {
2740e05c 893 final int nbEvents = ITmfEventRequest.ALL_DATA;
ccf2bbb4 894 final Vector<ITmfEvent> requestedEvents = new Vector<>();
25e48683 895 final long nbExpectedEvents = NB_EVENTS;
d18dd09b 896
25e48683 897 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 898 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 899 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 900 @Override
6256d8ad 901 public void handleData(final ITmfEvent event) {
25e48683
FC
902 super.handleData(event);
903 requestedEvents.add(event);
904 }
d18dd09b
ASL
905 };
906 fExperiment.sendRequest(request);
907 request.waitForCompletion();
908
909 assertEquals("nbEvents", nbExpectedEvents, requestedEvents.size());
910 assertTrue("isCompleted", request.isCompleted());
911 assertFalse("isCancelled", request.isCancelled());
912
913 // Ensure that we have distinct events.
25e48683 914 // Don't go overboard: we are not validating the stub!
20658947 915 for (int i = 0; i < nbExpectedEvents; i++) {
d18dd09b 916 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 917 }
d18dd09b 918 }
25e48683 919
d18dd09b
ASL
920 // ------------------------------------------------------------------------
921 // cancel
922 // ------------------------------------------------------------------------
923
6e1886bc 924 @Test
54a7a54c 925 public void testCancel() throws InterruptedException {
672a642a
AM
926 final int nbEvents = NB_EVENTS;
927 final int limit = BLOCK_SIZE;
ccf2bbb4 928 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b 929
25e48683 930 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 931 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 932 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 933 int nbRead = 0;
672a642a 934
25e48683 935 @Override
6256d8ad 936 public void handleData(final ITmfEvent event) {
25e48683
FC
937 super.handleData(event);
938 requestedEvents.add(event);
672a642a 939 if (++nbRead == limit) {
25e48683 940 cancel();
20658947 941 }
25e48683 942 }
672a642a 943
cb866e08
FC
944 @Override
945 public void handleCancel() {
672a642a 946 if (requestedEvents.size() < limit) {
25e48683 947 System.out.println("aie");
20658947 948 }
cb866e08 949 }
d18dd09b
ASL
950 };
951 fExperiment.sendRequest(request);
952 request.waitForCompletion();
953
672a642a 954 assertEquals("nbEvents", limit, requestedEvents.size());
d18dd09b
ASL
955 assertTrue("isCompleted", request.isCompleted());
956 assertTrue("isCancelled", request.isCancelled());
957 }
25e48683 958
17324c9a 959}
This page took 0.164402 seconds and 5 git commands to generate.