From 89f422d94bd1ea77e8f3f3580db06d833ff9ab9d Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Mon, 21 Sep 2015 16:28:34 -0400 Subject: [PATCH] Tests for packet_seq_num handling MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 5 traces are provided: - no packets lost - no packets lost with packet_seq_num not starting at 0 - 2 events lost before the last packet - 2 streams with events lost in 1 - 2 stream with events lost in both Signed-off-by: Julien Desfossez Signed-off-by: Jérémie Galarneau --- tests/bin/test_packet_seq_num | 75 ++++++++++++++++++ .../2_lost_before_last/metadata | 58 ++++++++++++++ .../2_lost_before_last/test_stream_0 | Bin 0 -> 384 bytes .../2_streams_lost_in_1/metadata | 58 ++++++++++++++ .../2_streams_lost_in_1/test_stream_0 | Bin 0 -> 640 bytes .../2_streams_lost_in_1/test_stream_1 | Bin 0 -> 384 bytes .../2_streams_lost_in_2/metadata | 58 ++++++++++++++ .../2_streams_lost_in_2/test_stream_0 | Bin 0 -> 640 bytes .../2_streams_lost_in_2/test_stream_1 | Bin 0 -> 384 bytes .../packet_seq_num/no_lost/metadata | 58 ++++++++++++++ .../packet_seq_num/no_lost/test_stream_0 | Bin 0 -> 384 bytes .../no_lost_not_starting_at_0/metadata | 58 ++++++++++++++ .../no_lost_not_starting_at_0/test_stream_0 | Bin 0 -> 384 bytes tests/tests | 1 + 14 files changed, 366 insertions(+) create mode 100755 tests/bin/test_packet_seq_num create mode 100644 tests/ctf-traces/packet_seq_num/2_lost_before_last/metadata create mode 100644 tests/ctf-traces/packet_seq_num/2_lost_before_last/test_stream_0 create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/metadata create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_0 create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_1 create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/metadata create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/test_stream_0 create mode 100644 tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/test_stream_1 create mode 100644 tests/ctf-traces/packet_seq_num/no_lost/metadata create mode 100644 tests/ctf-traces/packet_seq_num/no_lost/test_stream_0 create mode 100644 tests/ctf-traces/packet_seq_num/no_lost_not_starting_at_0/metadata create mode 100644 tests/ctf-traces/packet_seq_num/no_lost_not_starting_at_0/test_stream_0 diff --git a/tests/bin/test_packet_seq_num b/tests/bin/test_packet_seq_num new file mode 100755 index 00000000..1b165ec2 --- /dev/null +++ b/tests/bin/test_packet_seq_num @@ -0,0 +1,75 @@ +#!/bin/bash +# +# Copyright (C) - 2015 Julien Desfossez +# +# 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_no_lost() { + trace=$1 + + $BABELTRACE_BIN $trace >/dev/null 2>&1 + ok $? "Trace parses" + $BABELTRACE_BIN $trace 2>&1 >/dev/null | grep "\[warning\] Tracer lost" + if test $? = 0; then + fail 1 "Should not find any lost events" + else + ok 0 "No events lost" + fi +} + +test_lost() { + trace=$1 + expectedcountstr=$2 + + $BABELTRACE_BIN $trace >/dev/null 2>&1 + ok $? "Trace parses" + + # Convert warnings like: + # [warning] Tracer lost 2 trace packets between .... + # [warning] Tracer lost 3 trace packets between .... + # into "2,3" and make sure it matches the expected result + $BABELTRACE_BIN $trace 2>&1 >/dev/null | grep "\[warning\] Tracer lost" \ + | cut -d" " -f4 | tr "\n" "," | sed "s/.$//" | \ + grep "$expectedcountstr" >/dev/null + ok $? "Lost events string matches $expectedcountstr" + +} + +diag "Test the packet_seq_num validation" + +diag "No packet lost" +test_no_lost $TESTDIR/ctf-traces/packet_seq_num/no_lost + +diag "No packet lost, packet_seq_num not starting at 0" +test_no_lost $TESTDIR/ctf-traces/packet_seq_num/no_lost_not_starting_at_0 + +diag "1 stream, 2 packets lost before the last packet" +test_lost $TESTDIR/ctf-traces/packet_seq_num/2_lost_before_last "2" + +diag "2 streams, packets lost in one of them" +test_lost $TESTDIR/ctf-traces/packet_seq_num/2_streams_lost_in_1 "2" + +diag "2 streams, packets lost in both" +test_lost $TESTDIR/ctf-traces/packet_seq_num/2_streams_lost_in_2 "3,2,1" diff --git a/tests/ctf-traces/packet_seq_num/2_lost_before_last/metadata b/tests/ctf-traces/packet_seq_num/2_lost_before_last/metadata new file mode 100644 index 00000000..792831d3 --- /dev/null +++ b/tests/ctf-traces/packet_seq_num/2_lost_before_last/metadata @@ -0,0 +1,58 @@ +/* CTF 1.8 */ + +trace { + major = 1; + minor = 8; + uuid = "ad21eeaa-fab9-4692-aab8-ebd68c7feb17"; + 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 = "d336520f-985d-481e-8e35-d99328655354"; + 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); +}; + diff --git a/tests/ctf-traces/packet_seq_num/2_lost_before_last/test_stream_0 b/tests/ctf-traces/packet_seq_num/2_lost_before_last/test_stream_0 new file mode 100644 index 0000000000000000000000000000000000000000..50d36a468fb444af730234b7d1aeba24cbf06acf GIT binary patch literal 384 zcmX^3NB-bi#doWI?R1;8YRBtqJ@v1}88CqeM2J}dLbG71K!|W5m|zxEFPbQndl0|< zqEKZT5E`fbj7X+~^uYKaHdHT?3M3{0`!%6TZ6GvG`;h}g3#gU}st=?esuwDPMgagB CDkyCL literal 0 HcmV?d00001 diff --git a/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/metadata b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/metadata new file mode 100644 index 00000000..4fa16a30 --- /dev/null +++ b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/metadata @@ -0,0 +1,58 @@ +/* CTF 1.8 */ + +trace { + major = 1; + minor = 8; + uuid = "61db8e6b-2069-40e4-84ed-bc15f42181f0"; + 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 = "a0a8c252-db03-4f36-a148-80a0a3c4edff"; + 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); +}; + diff --git a/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_0 b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_0 new file mode 100644 index 0000000000000000000000000000000000000000..1b362cd4cb8158a7d26315b98f04079dba4c59ac GIT binary patch literal 640 zcmX^3NB&^q?Y?Y<@%0O@Yuj?Po(WG6=|Kh4MlAp?Z;2ATa@t C#Xb@M literal 0 HcmV?d00001 diff --git a/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_1 b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_1/test_stream_1 new file mode 100644 index 0000000000000000000000000000000000000000..d5114d90b48b66e580f177a861f0ce1df59ce0ac GIT binary patch literal 384 zcmX^3NB&^q?Y?YIJf}00Q>sL$y>uXq@&lAsJl&WU~V? O$bOK1s9qoo3jhGs%_toJ literal 0 HcmV?d00001 diff --git a/tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/metadata b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/metadata new file mode 100644 index 00000000..c0ea8f5e --- /dev/null +++ b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/metadata @@ -0,0 +1,58 @@ +/* CTF 1.8 */ + +trace { + major = 1; + minor = 8; + uuid = "eb5045f7-b471-488e-b963-0221ddf423a7"; + 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 = "2447a359-1e57-448f-96ef-3c324327047c"; + 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); +}; + diff --git a/tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/test_stream_0 b/tests/ctf-traces/packet_seq_num/2_streams_lost_in_2/test_stream_0 new file mode 100644 index 0000000000000000000000000000000000000000..b0beb6b4e77cde2169ae96acc087214363676c05 GIT binary patch literal 640 zcmX^3NB-dJ0N3wZ3O)LECNnAC{i3{_0TYNogqRf|Gz+E*ga{Xc31&g{qKQJe2l3l4 z3RR{7p>f*Jh-5lQ4~!3DL-iu5Kw=WGUlXd-214Vsp9#rGEg&1l2kD3EMN)ypBw)WS zRA~T&#%Vt@l93)jHY|cb`k{J}R3I@4*dGX0ngXG5+Ruh$WDt#&4R9i8A*T(i49^x^`ePFxd-vv zFA7zr0iki)kL)0j9!97>5F4r&DuPB4uwN6Z+y+A9w4W8pSS=u%3CaiQhw4RAfy4v= Dz`Y%~ literal 0 HcmV?d00001 diff --git a/tests/tests b/tests/tests index f9faf175..19ad568d 100644 --- a/tests/tests +++ b/tests/tests @@ -1,4 +1,5 @@ bin/test_trace_read +bin/test_packet_seq_num lib/test_bitfield lib/test_seek_empty_packet lib/test_seek_big_trace -- 2.34.1