Tests writer: write a trace defining no packet context
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 27 Jan 2017 04:15:33 +0000 (23:15 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:36 +0000 (12:57 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
configure.ac
tests/lib/Makefile.am
tests/lib/writer/Makefile.am [new file with mode: 0644]
tests/lib/writer/bt_python_helper.py.in [new file with mode: 0644]
tests/lib/writer/test_ctf_writer_empty_packet.py [new file with mode: 0644]

index 75d330b77c2f8ae9b1d53c07977f0b83bacb1473..bc04b288b9c859cdf2764214a9faa8670677a821 100644 (file)
@@ -412,6 +412,7 @@ AC_CONFIG_FILES([
        tests/bin/Makefile
        tests/bin/intersection/Makefile
        tests/lib/Makefile
        tests/bin/Makefile
        tests/bin/intersection/Makefile
        tests/lib/Makefile
+       tests/lib/writer/Makefile
        tests/utils/Makefile
        tests/utils/tap/Makefile
        extras/Makefile
        tests/utils/Makefile
        tests/utils/tap/Makefile
        extras/Makefile
@@ -442,6 +443,7 @@ AC_CONFIG_FILES([tests/lib/test_bin_info_complete], [chmod +x tests/lib/test_bin
 AC_CONFIG_FILES([tests/bin/test_trace_read], [chmod +x tests/bin/test_trace_read])
 AC_CONFIG_FILES([tests/bin/intersection/test_intersection], [chmod +x tests/bin/intersection/test_intersection])
 AC_CONFIG_FILES([tests/bin/intersection/bt_python_helper.py])
 AC_CONFIG_FILES([tests/bin/test_trace_read], [chmod +x tests/bin/test_trace_read])
 AC_CONFIG_FILES([tests/bin/intersection/test_intersection], [chmod +x tests/bin/intersection/test_intersection])
 AC_CONFIG_FILES([tests/bin/intersection/bt_python_helper.py])
+AC_CONFIG_FILES([tests/lib/writer/bt_python_helper.py])
 AC_CONFIG_FILES([tests/bin/test_packet_seq_num], [chmod +x tests/bin/test_packet_seq_num])
 AC_CONFIG_FILES([tests/bin/test_formats], [chmod +x tests/bin/test_formats])
 
 AC_CONFIG_FILES([tests/bin/test_packet_seq_num], [chmod +x tests/bin/test_packet_seq_num])
 AC_CONFIG_FILES([tests/bin/test_formats], [chmod +x tests/bin/test_formats])
 
index ed89ea3e93c9ab26e2d6c939ce7f38cd8794f65b..8fb1910861f11da2b655f6a1b5a163a7d5ced8ee 100644 (file)
@@ -1,3 +1,5 @@
+SUBDIRS = writer
+
 AM_CFLAGS = $(PACKAGE_CFLAGS) -I$(top_srcdir)/include -I$(top_srcdir)/tests/utils
 
 LIBTAP=$(top_builddir)/tests/utils/tap/libtap.la
 AM_CFLAGS = $(PACKAGE_CFLAGS) -I$(top_srcdir)/include -I$(top_srcdir)/tests/utils
 
 LIBTAP=$(top_builddir)/tests/utils/tap/libtap.la
diff --git a/tests/lib/writer/Makefile.am b/tests/lib/writer/Makefile.am
new file mode 100644 (file)
index 0000000..4cb79a1
--- /dev/null
@@ -0,0 +1,18 @@
+check_SCRIPTS = test_ctf_writer_empty_packet.py
+
+dist_noinst_SCRIPTS = test_ctf_writer_empty_packet.py
+EXTRA_DIST = test_ctf_writer_empty_packet.py
+
+all-local:
+       @if [ x"$(srcdir)" != x"$(builddir)" ]; then \
+               for script in $(EXTRA_DIST); do \
+                       cp -f $(srcdir)/$$script $(builddir); \
+               done; \
+       fi
+
+clean-local:
+       @if [ x"$(srcdir)" != x"$(builddir)" ]; then \
+               for script in $(EXTRA_DIST); do \
+                       rm -f $(builddir)/$$script; \
+               done; \
+       fi
diff --git a/tests/lib/writer/bt_python_helper.py.in b/tests/lib/writer/bt_python_helper.py.in
new file mode 100644 (file)
index 0000000..4b9fcaf
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+#
+# The MIT License (MIT)
+#
+# Copyright (C) 2016 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+import sys
+
+# Point the Python interpreter to the builddir's library and Babeltrace
+# bindings
+bt_module_path = '@abs_top_builddir@/bindings/python'
+bt_lib_py_path = '@abs_top_builddir@/bindings/python/babeltrace/.libs'
+bt_lib_bt_path = '@abs_top_builddir@/lib/.libs'
+bt_lib_ctf_path = '@abs_top_builddir@/format/ctf/.libs'
+
+sys.path.insert(0, bt_module_path)
+sys.path.insert(1, bt_lib_py_path)
+sys.path.insert(2, bt_lib_bt_path)
+sys.path.insert(3, bt_lib_ctf_path)
diff --git a/tests/lib/writer/test_ctf_writer_empty_packet.py b/tests/lib/writer/test_ctf_writer_empty_packet.py
new file mode 100644 (file)
index 0000000..0f6f9a5
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+#
+# The MIT License (MIT)
+#
+# Copyright (C) 2017 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+import bt_python_helper
+import tempfile
+import babeltrace.writer as btw
+import babeltrace.reader as btr
+import shutil
+import uuid
+
+TEST_COUNT = 4
+EXPECTED_EVENT_COUNT = 10
+trace_path = tempfile.mkdtemp()
+
+
+def print_test_result(test_number, result, description):
+        result_string = 'ok' if result else 'not ok'
+        result_string += ' {} - {}'.format(test_number, description)
+        print(result_string)
+
+def create_trace(path):
+        trace = btw.Writer(path)
+        clock = btw.Clock('test_clock')
+        trace.add_clock(clock)
+
+        integer_field_type = btw.IntegerFieldDeclaration(32)
+
+        event_class = btw.EventClass('simple_event')
+        event_class.add_field(integer_field_type, 'int_field')
+
+        stream_class = btw.StreamClass('test_stream')
+        stream_class.add_event_class(event_class)
+        stream_class.clock = clock
+
+        stream_class.packet_context_type = None
+        print_test_result(1, stream_class.packet_context_type is None,
+                          'Set stream class packet context type to None')
+
+        stream = trace.create_stream(stream_class)
+
+        for i in range(EXPECTED_EVENT_COUNT):
+                event = btw.Event(event_class)
+                event.payload('int_field').value = i
+                stream.append_event(event)
+        stream.flush()
+        print_test_result(2, True,
+                          'Flush a packet')
+
+        # It is not valid for a stream to contain more than one packet
+        # if it does not have content_size/packet_size info in its packet
+        # context
+        event = btw.Event(event_class)
+        event.payload('int_field').value = 42
+        stream.append_event(event)
+        try:
+            stream.flush()
+            second_flush_succeeded = True
+        except ValueError:
+            second_flush_succeeded = False
+
+        print_test_result(3, not second_flush_succeeded,
+                          'Flushing a second packet in a stream without a defined packet context fails')
+
+
+# TAP plan
+print('1..{}'.format(TEST_COUNT))
+print('# Creating trace at {}'.format(trace_path))
+create_trace(trace_path)
+
+traces = btr.TraceCollection()
+trace_handle = traces.add_trace(trace_path, 'ctf')
+if trace_handle is None:
+        print('Failed to open trace at {}'.format(trace_path))
+
+event_count = 0
+for event in traces.events:
+        event_count += 1
+
+print_test_result(4, EXPECTED_EVENT_COUNT == event_count,
+                  'Trace was found to contain {} events, expected {}'.format(
+                   event_count, EXPECTED_EVENT_COUNT))
This page took 0.031724 seconds and 4 git commands to generate.