* Yannick Brosseau ([email protected]) wrote: > The test that the current position is not already over the end of the trace > apply only > for the SEEK_CUR (seek next packet) section. A SEEK_SET can bring back the > current position > pointer to a valid position. > > Also add a unit test to validate the seeking at the last event of the trace. > > Fixes #551
oops, I missed this one. I just merged the unit test part as: commit 58cfc173d0b26dc11d05e22a30676b43593a98bd Author: Yannick Brosseau <[email protected]> Date: Wed Jun 26 14:44:34 2013 -0400 Add unit test validating seeking to last event of a trace [ Edited by Mathieu Desnoyers from patch "Move some validation in ctf_packet_seek in the SEEK_CUR section" ] Signed-off-by: Yannick Brosseau <[email protected]> Signed-off-by: Mathieu Desnoyers <[email protected]> See commit: commit c309df1c8522c61ea9f4f108fa2d1eee3a828037 Author: Mathieu Desnoyers <[email protected]> Date: Mon Jun 17 15:48:55 2013 -0400 Fix: use index, not cur_index, for SEEK_SET validation Fixes #551 Signed-off-by: Mathieu Desnoyers <[email protected]> for the fix. Thanks, Mathieu > > Signed-off-by: Yannick Brosseau <[email protected]> > --- > formats/ctf/ctf.c | 17 +++++++-------- > tests/lib/test-seeks.c | 55 > +++++++++++++++++++++++++++++++++++++++++++++++- > 2 files changed, 62 insertions(+), 10 deletions(-) > > diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c > index bb94e52..ed3defd 100644 > --- a/formats/ctf/ctf.c > +++ b/formats/ctf/ctf.c > @@ -670,7 +670,7 @@ int ctf_fini_pos(struct ctf_stream_pos *pos) > > /* > * for SEEK_CUR: go to next packet. > - * for SEEK_POS: go to packet numer (index). > + * for SEEK_SET: go to packet numer (index). > */ > void ctf_packet_seek(struct bt_stream_pos *stream_pos, size_t index, int > whence) > { > @@ -682,6 +682,7 @@ void ctf_packet_seek(struct bt_stream_pos *stream_pos, > size_t index, int whence) > off_t off; > struct packet_index *packet_index; > > + /* Test precondition (whence valid values) */ > switch (whence) { > case SEEK_CUR: > case SEEK_SET: /* Fall-through */ > @@ -729,19 +730,17 @@ void ctf_packet_seek(struct bt_stream_pos *stream_pos, > size_t index, int whence) > pos->offset = 0; > } else { > read_next_packet: > - if (pos->cur_index >= pos->packet_cycles_index->len) { > - pos->offset = EOF; > - return; > - } > - if (pos->cur_index >= pos->packet_real_index->len) { > - pos->offset = EOF; > - return; > - } > switch (whence) { > case SEEK_CUR: > { > uint64_t events_discarded_diff; > > + if (pos->cur_index >= pos->packet_cycles_index->len) { > + pos->offset = EOF; > + } > + if (pos->cur_index >= pos->packet_real_index->len) { > + pos->offset = EOF; > + } > if (pos->offset == EOF) { > return; > } > diff --git a/tests/lib/test-seeks.c b/tests/lib/test-seeks.c > index 47bb42e..a7b1360 100644 > --- a/tests/lib/test-seeks.c > +++ b/tests/lib/test-seeks.c > @@ -32,7 +32,7 @@ > #include "common.h" > #include "tap.h" > > -#define NR_TESTS 23 > +#define NR_TESTS 29 > > void run_seek_begin(char *path, uint64_t expected_begin) > { > @@ -134,6 +134,58 @@ void run_seek_last(char *path, uint64_t expected_last) > bt_context_put(ctx); > } > > +void run_seek_time_at_last(char *path, uint64_t expected_last) > +{ > + struct bt_context *ctx; > + struct bt_ctf_iter *iter; > + struct bt_ctf_event *event; > + struct bt_iter_pos newpos; > + int ret; > + uint64_t timestamp_last; > + > + /* Open the trace */ > + ctx = create_context_with_path(path); > + if (!ctx) { > + plan_skip_all("Cannot create valid context"); > + } > + > + /* Create iterator with null last and end */ > + iter = bt_ctf_iter_create(ctx, NULL, NULL); > + if (!iter) { > + plan_skip_all("Cannot create valid iterator"); > + } > + > + event = bt_ctf_iter_read_event(iter); > + > + ok(event, "Event valid at beginning"); > + > + /* Seek to last */ > + newpos.type = BT_SEEK_TIME; > + newpos.u.seek_time = expected_last; > + ret = bt_iter_set_pos(bt_ctf_get_iter(iter), &newpos); > + > + ok(ret == 0, "Seek time at last retval %d", ret); > + > + event = bt_ctf_iter_read_event(iter); > + > + ok(event, "Event valid at last position"); > + > + timestamp_last = bt_ctf_get_timestamp(event); > + > + ok1(timestamp_last == expected_last); > + > + /* Try to read next event */ > + ret = bt_iter_next(bt_ctf_get_iter(iter)); > + > + ok(ret == 0, "iter next should return an error"); > + > + event = bt_ctf_iter_read_event(iter); > + > + ok(event == 0, "Event after last should be invalid"); > + > + bt_context_put(ctx); > +} > + > void run_seek_cycles(char *path, > uint64_t expected_begin, > uint64_t expected_last) > @@ -242,6 +294,7 @@ int main(int argc, char **argv) > } > > run_seek_begin(path, expected_begin); > + run_seek_time_at_last(path, expected_last); > run_seek_last(path, expected_last); > run_seek_cycles(path, expected_begin, expected_last); > > -- > 1.7.10.4 > > > _______________________________________________ > lttng-dev mailing list > [email protected] > http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
