--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) - 2015 Julien Desfossez <jdesfossez@efficios.com>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License, version 2 only, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+CURDIR=$(dirname $0)
+TESTDIR=$CURDIR/..
+
+BABELTRACE_BIN=$CURDIR/../../converter/babeltrace
+
+source $TESTDIR/utils/tap/tap.sh
+
+NUM_TESTS=10
+
+plan_tests $NUM_TESTS
+
+test_intersect() {
+ trace=$1
+ totalevents=$2
+ intersect=$3
+
+ test $($BABELTRACE_BIN $trace | wc -l) = $totalevents
+ ok $? "$totalevents events in the whole trace"
+ test $($BABELTRACE_BIN --stream-intersection $trace 2>/dev/null| wc -l) = $intersect
+ ok $? "$intersect events in packets intersecting"
+}
+
+diag "Test the stream intersection feature"
+
+diag "2 streams offsetted with 3 packets intersecting"
+test_intersect $TESTDIR/ctf-traces/intersection/3eventsintersect 8 3
+
+diag "2 streams offsetted with 3 packets intersecting (exchanged file names)"
+test_intersect $TESTDIR/ctf-traces/intersection/3eventsintersectreverse 8 3
+
+diag "No intersection between 2 streams"
+test_intersect $TESTDIR/ctf-traces/intersection/nointersect 6 0
+
+diag "Only 1 stream"
+test_intersect $TESTDIR/ctf-traces/intersection/onestream 3 3
+
+diag "No stream at all"
+test_intersect $TESTDIR/ctf-traces/intersection/nostream 0 0
--- /dev/null
+/* CTF 1.8 */
+
+trace {
+ major = 1;
+ minor = 8;
+ uuid = "7afe8fbe-79b8-4f6a-bbc7-d0c782e7ddaf";
+ byte_order = be;
+ packet.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } magic;
+ integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } uuid[16];
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } stream_id;
+ } align(8);
+};
+
+env {
+ host = "sinkpad";
+};
+
+clock {
+ name = test_clock;
+ uuid = "7b9e2f2a-530e-4ab1-816f-0831b5c09140";
+ description = "This is a test clock";
+ freq = 1000000000;
+ precision = 10;
+ offset_s = 1351530929945824323;
+ offset = 0;
+ absolute = TRUE;
+};
+
+stream {
+ id = 0;
+ event.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } id;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; map = clock.test_clock.value; } timestamp;
+ } align(8);
+
+ packet.context := struct {
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_begin;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_end;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } content_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } packet_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } events_discarded;
+ integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_seq_num;
+ } align(8);
+};
+
+event {
+ id = 0;
+ name = "dummy_event";
+ stream_id = 0;
+ fields := struct {
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } dummy_value;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } tracefile_id;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_begin;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_end;
+ } align(1);
+};
+
--- /dev/null
+/* CTF 1.8 */
+
+trace {
+ major = 1;
+ minor = 8;
+ uuid = "7afe8fbe-79b8-4f6a-bbc7-d0c782e7ddaf";
+ byte_order = be;
+ packet.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } magic;
+ integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } uuid[16];
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } stream_id;
+ } align(8);
+};
+
+env {
+ host = "sinkpad";
+};
+
+clock {
+ name = test_clock;
+ uuid = "7b9e2f2a-530e-4ab1-816f-0831b5c09140";
+ description = "This is a test clock";
+ freq = 1000000000;
+ precision = 10;
+ offset_s = 1351530929945824323;
+ offset = 0;
+ absolute = TRUE;
+};
+
+stream {
+ id = 0;
+ event.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } id;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; map = clock.test_clock.value; } timestamp;
+ } align(8);
+
+ packet.context := struct {
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_begin;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_end;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } content_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } packet_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } events_discarded;
+ integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_seq_num;
+ } align(8);
+};
+
+event {
+ id = 0;
+ name = "dummy_event";
+ stream_id = 0;
+ fields := struct {
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } dummy_value;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } tracefile_id;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_begin;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_end;
+ } align(1);
+};
+
--- /dev/null
+/* CTF 1.8 */
+
+trace {
+ major = 1;
+ minor = 8;
+ uuid = "a967fbc0-c89b-4b92-b5df-30688d576ddf";
+ byte_order = be;
+ packet.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } magic;
+ integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } uuid[16];
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } stream_id;
+ } align(8);
+};
+
+env {
+ host = "sinkpad";
+};
+
+clock {
+ name = test_clock;
+ uuid = "fb759646-b2b9-42d7-9013-f790694dd902";
+ description = "This is a test clock";
+ freq = 1000000000;
+ precision = 10;
+ offset_s = 1351530929945824323;
+ offset = 0;
+ absolute = TRUE;
+};
+
+stream {
+ id = 0;
+ event.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } id;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; map = clock.test_clock.value; } timestamp;
+ } align(8);
+
+ packet.context := struct {
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_begin;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_end;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } content_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } packet_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } events_discarded;
+ integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_seq_num;
+ } align(8);
+};
+
+event {
+ id = 0;
+ name = "dummy_event";
+ stream_id = 0;
+ fields := struct {
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } dummy_value;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } tracefile_id;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_begin;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_end;
+ } align(1);
+};
+
--- /dev/null
+/* CTF 1.8 */
+
+trace {
+ major = 1;
+ minor = 8;
+ uuid = "a967fbc0-c89b-4b92-b5df-30688d576ddf";
+ byte_order = be;
+ packet.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } magic;
+ integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } uuid[16];
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } stream_id;
+ } align(8);
+};
+
+env {
+ host = "sinkpad";
+};
+
+clock {
+ name = test_clock;
+ uuid = "fb759646-b2b9-42d7-9013-f790694dd902";
+ description = "This is a test clock";
+ freq = 1000000000;
+ precision = 10;
+ offset_s = 1351530929945824323;
+ offset = 0;
+ absolute = TRUE;
+};
+
+stream {
+ id = 0;
+ event.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } id;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; map = clock.test_clock.value; } timestamp;
+ } align(8);
+
+ packet.context := struct {
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_begin;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_end;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } content_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } packet_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } events_discarded;
+ integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_seq_num;
+ } align(8);
+};
+
+event {
+ id = 0;
+ name = "dummy_event";
+ stream_id = 0;
+ fields := struct {
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } dummy_value;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } tracefile_id;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_begin;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_end;
+ } align(1);
+};
+
--- /dev/null
+/* CTF 1.8 */
+
+trace {
+ major = 1;
+ minor = 8;
+ uuid = "a967fbc0-c89b-4b92-b5df-30688d576ddf";
+ byte_order = be;
+ packet.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } magic;
+ integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } uuid[16];
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } stream_id;
+ } align(8);
+};
+
+env {
+ host = "sinkpad";
+};
+
+clock {
+ name = test_clock;
+ uuid = "fb759646-b2b9-42d7-9013-f790694dd902";
+ description = "This is a test clock";
+ freq = 1000000000;
+ precision = 10;
+ offset_s = 1351530929945824323;
+ offset = 0;
+ absolute = TRUE;
+};
+
+stream {
+ id = 0;
+ event.header := struct {
+ integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } id;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; map = clock.test_clock.value; } timestamp;
+ } align(8);
+
+ packet.context := struct {
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_begin;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } timestamp_end;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } content_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } packet_size;
+ integer { size = 64; align = 8; signed = false; encoding = none; base = decimal; byte_order = be; } events_discarded;
+ integer { size = 64; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_seq_num;
+ } align(8);
+};
+
+event {
+ id = 0;
+ name = "dummy_event";
+ stream_id = 0;
+ fields := struct {
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } dummy_value;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } tracefile_id;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_begin;
+ integer { size = 32; align = 1; signed = false; encoding = none; base = decimal; byte_order = be; } packet_end;
+ } align(1);
+};
+
bin/test_trace_read
bin/test_packet_seq_num
+bin/test_intersection
lib/test_bitfield
lib/test_seek_empty_packet
lib/test_seek_big_trace