Simon Marchi [Wed, 14 Feb 2024 17:09:42 +0000 (12:09 -0500)]
tests/lib: create component classes using C++ bindings in `utils/run-in.cpp`
Change-Id: I449799599a5e0d3b1f4ad1864c027b5e60886cda
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11805
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 15 Feb 2024 21:19:17 +0000 (16:19 -0500)]
cpp-common/bt2: make `SinkCompClsBridge::userCompFromLibSelfCompPtr` public
`SinkCompClsBridge::userCompFromLibSelfCompPtr` needs to be public for
`CompClsBridgeWithInputPorts::inputPortConnected` to access it, for
instance.
Here's the error I got when trying to use `SinkCompClsBridge` in a
following patch, which lead to this fix:
CXX utils/run-in.lo
In file included from /home/smarchi/src/babeltrace/src/cpp-common/bt2/component-class.hpp:12,
from /home/smarchi/src/babeltrace/tests/lib/utils/run-in.cpp:10:
/home/smarchi/src/babeltrace/src/cpp-common/bt2/plugin-dev.hpp: In instantiation of 'static bt_component_class_port_connected_method_status bt2::internal::CompClsBridgeWithInputPorts<SpecCompClsBridgeT, LibTypesT>::inputPortConnected(typename LibTypesT::SelfComp*, bt_self_component_port_input*, const bt_port_output*) [with SpecCompClsBridgeT = bt2::internal::SinkCompClsBridge<{anonymous}::DummySink>; LibTypesT = bt2::internal::SinkCompClsLibTypes; bt_component_class_port_connected_method_status = bt_component_class_port_connected_method_status; typename LibTypesT::SelfComp = bt_self_component_sink; bt_self_component_port_input = bt_self_component_port_input; bt_port_output = bt_port_output]':
/home/smarchi/src/babeltrace/src/cpp-common/bt2/component-class.hpp:477:88: required from 'static bt2::internal::CommonSinkComponentClass<LibObjT>::Shared bt2::internal::CommonSinkComponentClass<LibObjT>::create() [with UserCompClsT = {anonymous}::DummySink; LibObjT = bt_component_class_sink; Shared = bt2::SharedObject<bt2::internal::CommonSinkComponentClass<bt_component_class_sink>, bt_component_class_sink, bt2::internal::SinkComponentClassRefFuncs>]'
/home/smarchi/src/babeltrace/tests/lib/utils/run-in.cpp:141:72: required from here
/home/smarchi/src/babeltrace/src/cpp-common/bt2/plugin-dev.hpp:160:59: error: 'static UserCompClsT& bt2::internal::CompClsBridge<UserCompClsT, LibTypesT>::userCompFromLibSelfCompPtr(_LibSelfCompPtr) [with UserCompClsT = {anonymous}::DummySink; LibTypesT = bt2::internal::SinkCompClsLibTypes; _LibSelfCompPtr = bt_self_component_sink*]' is inaccessible within this context
160 | SpecCompClsBridgeT::userCompFromLibSelfCompPtr(libSelfCompPtr)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
/home/smarchi/src/babeltrace/src/cpp-common/bt2/plugin-dev.hpp:62:26: note: declared here
62 | static UserCompClsT& userCompFromLibSelfCompPtr(const _LibSelfCompPtr libSelfCompPtr) noexcept
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
Change-Id: If7dabf6280f3d861854dd21fa92f785f7176bd5e
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11804
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Fri, 16 Feb 2024 20:00:59 +0000 (15:00 -0500)]
cpp-common/bt2: add component class creation methods
Add `create()` methods to `CommonSourceComponentClass`,
`CommonFilterComponentClass` and `CommonSinkComponentClass`, allowing
the user to create component classes at run time from some class that
derives from `UserSourceComponent`, `UserFilterComponent` and
`UserSinkComponent`.
The user component class (`UserComponentT`) must provide a static member
`name` of type `const char *`. It can also provide static members named
`description` and `help`, also of type `const char *`.
Change-Id: I3bd550fd90a2a75d8154d29d00bf0bf4f9b1fd3e
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11817
Simon Marchi [Wed, 14 Feb 2024 16:09:27 +0000 (11:09 -0500)]
cpp-common/bt2: add C++ component class bindings
Add C++ bindings for component classes.
Similar to how C++ bindings for components work, the
`CommonComponentClass` type is implicitly constructible from the
specialized component class types, so that it's possible to pass a
`SourceComponentClass` to something expecting a `ComponentClass`, for
instance.
Get a component class' name, description or help with the methods of the
same name.
Change-Id: Ia6301f4b37f4f86036f6e09cc2aaf49d7028c6fc
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11803
Simon Marchi [Fri, 16 Feb 2024 03:53:01 +0000 (22:53 -0500)]
cpp-common/bt2: move user component class bases to `component-class-dev.hpp`
It will become possible to use these classes to create component classes
at runtime, not only in the context of plugins.
Change-Id: I3507a8025fa4e8af6bdb42f2be053dd43f3c2eaa
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11814
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 15 Feb 2024 21:17:55 +0000 (16:17 -0500)]
cpp-common/bt2: move component class bridges to `internal/comp-cls-bridge.hpp`
The bridges are going to be used when creating component classes at
runtime, not only in the context of plugins.
Change-Id: If6d04531ee660692d1a6eb84950a584530a23566
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11813
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 12 Feb 2024 22:07:35 +0000 (17:07 -0500)]
tests/lib: C++ify `conds/utils.cpp` a bit
Change `utils.cpp` to fit a bit more our C++ style.
- use an anonymous namespace
- use camel-case for functions
- use `bt2s::span` for the list of triggers
- declare functions as `noexcept`
I didn't update the contents of `utils.hpp`, because I expect this to
change in some following patches, while I expect `utils.cpp` to stay
pretty much as-is.
Change-Id: I9dc01a22b3e9ceb2d90cd35c9f6ca93d1afe248f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11794
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 13 Feb 2024 03:46:02 +0000 (22:46 -0500)]
tests/lib: C++ify `conds/conds-triggers.cpp`
- use an anonymous namespace for local stuff
- use bt2 C++ bindings
- rename functions to camel case
- mark functions as `noexcept`
Change-Id: Id31e3703eb48662cc3090d57247fb16bcea0d7f8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11797
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 13 Feb 2024 03:28:30 +0000 (22:28 -0500)]
tests/lib: C++ify `test-fields-bin.cpp`
- use the C++ bindings
- rename `test_string_clear` to `testStringClear`
- use an anonymous namespace
- declare testStringClear as `noexcept`
- use constexpr
I checked that the test still managed to catch the bug fixed in
0022a87819b0 ("Fix: clear_string_field(): set first character to 0").
Change-Id: I3631b22f9e70ea5db620ce0597d04e5035bfa91d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11793
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 13 Feb 2024 03:26:22 +0000 (22:26 -0500)]
tests/lib: pass C++ wrapper types to `RunIn` callbacks
Pass C++ wrapper types to `RunInCompClsInitFunc`,
`RunInCompClsQueryFunc` and `RunInMsgIterClsInitFunc` instead of C
library types.
Adjust callers and callees in a trivial way.
Change-Id: I3d6fcee8e0239976483995affcd7e95fb5fa12ef
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11796
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Wed, 14 Feb 2024 16:14:07 +0000 (11:14 -0500)]
cpp-common/bt2: make `ConstComponentPorts::operator[](bt2c::CStringView)` return an `OptionalBorrowedObject`
The library functions that borrow ports by name return `NULL` when
no port with such name exist. Change
`ConstComponentPorts::operator[](bt2c::CStringView)` to return an
`OptionalBorrowedObject` to model that in C++.
Change-Id: I2fafb509622e324980b88b70735e7beeb25f7fb4
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11802
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 13 Feb 2024 16:00:46 +0000 (11:00 -0500)]
cpp-common/bt2: add const_cast when setting user data
If the user data type is specified as a const type,
`static_cast<void *>` will not work. Fix that by doing a static_cast to
`const void *` then a const_cast to `void *`.
Change-Id: Ic39c9c25da1899defe4edf8c8e800297fbf2fb2d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11799
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 12 Feb 2024 21:17:51 +0000 (16:17 -0500)]
cpp-common/bt2: add missing return in `SelfComponentPort::data`
Change-Id: Ib381d8ee919206361f81721ca418b7fdba330c9c
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11792
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Wed, 14 Feb 2024 21:03:58 +0000 (16:03 -0500)]
cpp-common/bt2: add `SelfComponent::createClockClass`
Add the C++ binding to create a clock class from a self component.
Change-Id: I83bab751520458a7c39982df70a71ba214317428
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11810
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 20:58:54 +0000 (15:58 -0500)]
cpp-common/bt2: add `SelfComponent::createTraceClass`
Add the C++ binding to create a trace class from a self component.
Change-Id: Iaa5ad98bb0dfce7ac8ab7d3c51446cf4ad387b29
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11791
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 20:53:28 +0000 (15:53 -0500)]
cpp-common/bt2: add message creation methods to `SelfMessageIterator`
Add methods on `SelfMessageIterator` to create all possible kinds of
messages.
Change-Id: I44b5be4e0783affef619983530d8af619560569f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11790
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 20:39:59 +0000 (15:39 -0500)]
cpp-common/bt2: fix trivial-ish mistakes in plugin-dev.hpp
Fix a few problems that were found by exercising the `plugin-dev.hpp`
code a bit more.
⚾ Use public inheritance in `SinkCompClsBridge`.
⚾ Add return statement in happy path of
`SinkCompClsBridge::graphIsConfigured`.
⚾ Use `DataT&` as the parameter type to `_addOutputPort` and
`_addInputPort` methods, matching what
`Self*Component::add*Port` expects.
⚾ Call `_outputPortConnected` instead of `outputPortConnected` in
`UserSourceComponent::outputPortConnected`, which otherwise results
in infinite recursion.
Change-Id: Ieab12436c4b85b5a33195be0ea388b3f545f07cd
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11789
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 13 Feb 2024 17:13:01 +0000 (12:13 -0500)]
cpp-common/bt2: `User*Component`: pass query method data to user `_query` methods
Make `User*Component::query()` pass down the query method data down to
user methods.
Child classes of `UserSourceComponent`, `UserFilterComponent` and
`UserSinkComponent` can pass a template parameter to indicate the type
of query method data they wish to receive.
`UserComponent` defines a `QueryData` public member using the type
received as a template parameter. `CompClsBridge::query` uses this type
to cast the query method data, received from the lib as a `void *`, to
that type.
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: If9f776dbaa723dd65391e3ea57c3067f53f52dc4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11788
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 15 Feb 2024 03:12:39 +0000 (22:12 -0500)]
cpp-common/bt2: `CompClsBridge`: pass init method data to user component constructors
Make `CompClsBridge::init` pass the initialization method data (received
from the lib as a `void *`) down to the user component's constructor.
For convenience, user component classes can specify the type of the data
they expect to receive as a template parameter, sparing them of doing a
static_cast. This template parameter can be omitted, in which case it
defaults to `void`.
Change-Id: I6b64ea6d75d535d7f2f3b8d559bd2698c186f0ca
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11787
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 13 Feb 2024 16:50:10 +0000 (11:50 -0500)]
src/cpp-common: pass user message iterator class to `UserSourceComponent` and `UserFilterComponent`
🍎 Pass the user message iterator class type as template parameters to
`UserSourceComponent` and `UserFilterComponent`.
🍎 Make them set a public type `MessageIterator` with that.
🍎 Update the `BT_CPP_PLUGIN_*` macros to not take the message iterator
class type, but use `_userComponentClass::MessageIterator`
instead.
Change-Id: I7af3a1a088a61e5b83e4a4047f808435221352cc
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11800
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 19:30:07 +0000 (14:30 -0500)]
cpp-common/bt2: add `CommonStringField::length` method
Add this method, which wraps `bt_field_string_get_length`.
Change-Id: Ie662e1fe84c56e6f3d48cadcd5f3c4d153ea108d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11786
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 19:29:15 +0000 (14:29 -0500)]
cpp-common: remove unused include
Remove some unused (according to clangd) includes. Add one IWYU pragma
to tell it to keep `fmt/format.h`, which is needed to make the
`format_as` function defined in that file work.
Change-Id: I9c4d716975e46bbfad0372aa7ede5f449868848f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11782
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 19:01:28 +0000 (14:01 -0500)]
tests/utils/python/tjson.py: print actual type when a type error occurs
Make `_check_type` output the actual type in addition to the expected
type. Example:
Before: # TypeError: `.[0]."cond-id"`: expecting a string value
After: # TypeError: `.[0]."cond-id"`: expecting a string value, got an array
Change-Id: I9615aa380b12fe5e7fd65b079840b779f9530f3a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11781
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 12 Feb 2024 18:48:51 +0000 (13:48 -0500)]
tests/lib/conds/test.py: use `tjson`, add type annotations
Use `tests/utils/python/tjson.py` and add some types annotations to make
`tests/lib/conds/test.py` pyright-clean:
$ PYTHONPATH=/home/simark/src/babeltrace/tests/utils/python pyright tests/lib/conds/test.py
0 errors, 0 warnings, 0 informations
Change-Id: Ie7e233e51b5fef645f6ca2c23a66e8c81f00f2a8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11780
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 15 Feb 2024 21:51:41 +0000 (16:51 -0500)]
common: remove unused things from common.{c,h}
All of these things appear to be unused in the project.
Change-Id: I6f6761a9679b067ec11f607311d7c7b6ee761485
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11812
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sun, 11 Feb 2024 05:03:01 +0000 (00:03 -0500)]
tests/lib: remove some `Makefile.am`s
Move the content of all Makefiles under `tests/lib` to
`tests/lib/Makefile.am`.
Change-Id: I114ef3a534bafecd205f310891f2c90f3e40d334
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11779
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 8 Feb 2024 20:35:18 +0000 (15:35 -0500)]
flt.utils.muxer: remove msgTypeStr
Make {fmt} format the message type directly.
Change-Id: Id887079214992a346d13fcafbd048aa8af9d4457
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11768
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Fri, 9 Feb 2024 19:32:50 +0000 (14:32 -0500)]
tests/utils/env.sh.in: remove `#!/bin/bash`, add a ShellCheck directive
`tests/utils/env.sh` is only meant to be sourced, never executed
directly, therefore the `#!/bin/bash` line is useless.
Add a ShellCheck shell directive to tell ShellCheck that this is (at
least) Bash code.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ieb9bd996e43e8609d1e3e7b7b3d614bd4db6f234
Simon Marchi [Thu, 8 Feb 2024 20:36:41 +0000 (15:36 -0500)]
cpp-common/bt2c: add `format_as` function for `bt2::MessageType`
Add a `format_as` that lets {fmt} format variables of type
`bt2::MessageType` directly. Re-use `bt_common_message_type_string` to
avoid duplicating that code.
Change-Id: I81152a152284b156535813fd8fa5d61a3dd7219f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Simon Marchi [Thu, 8 Feb 2024 19:31:13 +0000 (14:31 -0500)]
bt2/setup.py.in: don't call get_cflags/get_ldshared unnecessarily
In our_get_config_vars(), we call get_cflags() and get_ldshared() even
if their result is not going to be used. Make the
`overridden_config_vars` dict hold references to the functions, and
invoke them as needed.
Change-Id: Ibad179b84fb06c4d7ae9bf1160ec38e903210f79
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Fri, 9 Feb 2024 03:35:49 +0000 (22:35 -0500)]
tests/utils/env.sh.in: make it portable for Bash and Zsh
The syntax
${!varname:-}
isn't valid in Zsh.
To make it possible to source the generated `env.sh` interactively, make
this (more) portable.
Now _set_var_def() also sets if the variable is set but empty, but I
don't think it's an issue here.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I07d49199c403ac24d569d383fd8bde2cf5b668e6
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11769
Philippe Proulx [Fri, 9 Feb 2024 18:58:38 +0000 (13:58 -0500)]
tools/shellcheck.sh: use tabs
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I666cf63f2ca27c731896fb9d01ae3e5a23f4d6b4
Simon Marchi [Thu, 8 Feb 2024 19:25:32 +0000 (14:25 -0500)]
bt2/setup.py.in: improve legibility of our_get_config_vars a bit
This is a bit subjective, but avoid early returns / continue. I like
early returns when there is clearly one "happy" of "main" path in a
function, for instance for error handling or returning early because a
function is a no-op. But when handling different significant cases, I
prefer an explicit if/else. It makes the different code paths stand
out visually.
Change-Id: I484eb4ec7187ce3c889507e31349c3b4461f3fc7
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11764
Simon Marchi [Thu, 8 Feb 2024 21:12:56 +0000 (16:12 -0500)]
Revert "tests/utils/utils.sh: quote command name when running it"
This reverts commit
e612f2daa6b262796ca0750754142f0abd686f1d.
I believe that we want to do word splitting in these cases. My
`$BT_TESTS_CC_BIN` is "ccache gcc". Without word splitting, I get:
/home/smarchi/src/babeltrace/tests/utils/utils.sh: line 431: ccache gcc: command not found
Change-Id: I7443dbcf1a45672cf4c7fcb7e15e94e83e85a832
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11766
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 8 Feb 2024 19:14:45 +0000 (14:14 -0500)]
.editorconfig: handle .py.in files
Handle .py.in files the same as Python, so that editors use the proper
whitespace settings when editing `setup.py.in`.
Change-Id: Ic02716165d8c809ff152552fb7d9cc160c2435de
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11763
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Wed, 7 Feb 2024 16:28:53 +0000 (11:28 -0500)]
tests/lib: reorganize Makefile.am a bit
Regroup _SOURCES variables with the corresponding _LDADD ones.
Change-Id: Ib90b09688b5275789aa03d6de0a6c1584535f173
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11754
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 6 Feb 2024 19:50:42 +0000 (14:50 -0500)]
lib: remove unused includes
Remove some includes that clangd reports as unused. Add a few includes
to make up for includes that were used transitively, that were removed.
Change-Id: I5b38ab8af317198cd9043943cd955e3a4eeb2d19
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11752
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 6 Feb 2024 20:03:12 +0000 (15:03 -0500)]
lib: remove BT_ASSERT_COND_SUPPORTED check in graph/graph.h
This header file no longer uses pre-condition macros.
Change-Id: I1afd3a709560221dd67100a5a0beb653f79df6a3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11751
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 27 Nov 2023 21:23:10 +0000 (16:23 -0500)]
Fix: lib: strengthen clock expectation check for no Unix epoch / no UUID case
When an iterator sees a clock class with an origin that is not the Unix
and has no UUID, it sets its clock expectation to
CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID. In this mode, when validating
subsequent clock classes, it validates that the clock class' origin is
not the Unix epoch and that it has no UUID. This is too loose: an
iterator could send messages with two distinct clocks with unknown
origins and no UUID, and it would pass validation. However, these two
clock classes are not correletable.
Fix that by making the iterator remember which specific clock class
instance it saw first. Each subsequent message must have exactly that
clock class instance.
To be sure that a clock class an iterator has saved doesn't get freed,
and then a new one reallocated at the same address, the iterator takes a
strong reference to the clock class. This ensures that the saved clock
class at least outlives the iterator.
TODO: I would like to write a test for this
Change-Id: I339936b730fe2f4e64dbc58d56557ffcd23cce16
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11448
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 8 Feb 2024 03:15:37 +0000 (22:15 -0500)]
cpp-common/bt2c: remove lib-str.hpp
This is unused, and I think it will never be. If we need something like
this, it will likely be in the form of a `format_as` function used by
the `{fmt}` library.
Change-Id: I81e21d697f6b246c986c5c9126b1177a0d5bcb03
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11759
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Fri, 10 Nov 2023 14:54:44 +0000 (09:54 -0500)]
configure.ac: don't make `tests/utils/env.sh` executable
It's only meant to be sourced, not executed directly.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I085c8e83ce9596336c0904a28b94e832e33665ab
Philippe Proulx [Fri, 10 Nov 2023 14:48:29 +0000 (09:48 -0500)]
run-in-py-utils-bt2-env.sh: rename `UTILSSH` variable -> `utils_sh`
Uppercase suggests this is an exported variable while it's local to the
script.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5e0d0885b9b2668bd1347156c20d90c9421a9782
Philippe Proulx [Fri, 10 Nov 2023 14:46:47 +0000 (09:46 -0500)]
run-in-py-utils-bt2-env.sh: `${@}` -> `$@`
Curly braces not needed here.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I37ead8ae4b6a5f7ce450dbb976690ce53af36e24
Philippe Proulx [Fri, 10 Nov 2023 14:45:50 +0000 (09:45 -0500)]
run-in-py-utils-bt2-env.sh: update comment
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I33aed97ce0a22ffe0a106be088c951d04a9b22bb
Philippe Proulx [Fri, 10 Nov 2023 14:41:57 +0000 (09:41 -0500)]
run-in-py-utils-bt2-env.sh: remove unneeded quotes
Word splitting and globbing doesn't happen in those contexts.
Removing them makes the code easier to read.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I067b0a53098ed42f61ea45ec37fe1fa6b8ba4d2e
Philippe Proulx [Fri, 10 Nov 2023 14:40:37 +0000 (09:40 -0500)]
run-in-py-utils-bt2-env.sh: use the arg. count io. checking a string
More readable.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ib8f616f815c1d7d6ed44a6b6c412e419225aa8dd
Philippe Proulx [Fri, 10 Nov 2023 14:25:07 +0000 (09:25 -0500)]
run-in-py-utils-bt2-env.sh: update error message style
Also print to the standard error.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia77de318ec01aa92a80c086df6f68c4240ba9101
Philippe Proulx [Fri, 10 Nov 2023 14:19:17 +0000 (09:19 -0500)]
run-in-py-utils-bt2-env.sh: use `[[ ... ]]` instead of `[` or `test`
For the same reason we're using this form in `utils.sh` (see
"tests/utils/utils.sh: use `[[ ... ]]` instead of `[` or `test`").
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9284cff1dc7d64cfbcf2ad56e6a3d2bd3652fb6e
Philippe Proulx [Fri, 10 Nov 2023 14:17:17 +0000 (09:17 -0500)]
run-in-py-utils-bt2-env.sh: update usage and remove redundant comment
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I36137023cc7d9882d2695f5c9eb2dd8568463540
Philippe Proulx [Fri, 10 Nov 2023 14:09:21 +0000 (09:09 -0500)]
tests/utils: `run-python-bt2.sh` -> `run-in-py-env.sh`
This makes it consistent with the underlying Bash function name and
indicates that it doesn't need to run Python itself.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If030bcea8349edc4d4ba1425a64778c08227101d
Philippe Proulx [Fri, 10 Nov 2023 21:36:27 +0000 (16:36 -0500)]
tests/utils/utils.sh: gen_mctf_trace() -> bt_gen_mctf_trace()
Adding the `bt_` prefix like other functions in `utils.sh`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I682317576133727155778a79fc6716a83697e18e
Philippe Proulx [Fri, 10 Nov 2023 14:04:42 +0000 (09:04 -0500)]
tests/utils/utils.sh: run_python_bt2_test() -> bt_run_py_test()
Adding the `bt_` prefix like other functions in `utils.sh` and
shortening the rest.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I58caf29067a45495a1e80a9937d937a87b14c969
Philippe Proulx [Fri, 10 Nov 2023 14:03:15 +0000 (09:03 -0500)]
tests/utils/utils.sh: run_python_bt2() -> bt_run_in_py_env()
Adding the `bt_` prefix like other functions in `utils.sh` and renaming
the rest to indicate that it runs something in a specific environment,
not necessarily Python itself.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5635f04f494c50e1955a27adaae28f964c336bf3
Philippe Proulx [Fri, 10 Nov 2023 13:59:49 +0000 (08:59 -0500)]
tests/utils/utils.sh: run_python() -> bt_run_in_py_utils_env()
Adding the `bt_` prefix like other functions in `utils.sh` and renaming
the rest to indicate that it runs something in a specific environment,
not necessarily Python itself.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I011c837857eb6d2b08f0c0064d399fd3acc2b89d
Philippe Proulx [Fri, 10 Nov 2023 05:41:41 +0000 (00:41 -0500)]
tests/utils/utils.sh: remove redundancy when setting def. var. values
This patch removes more redundancy in `utils.sh` by using a function
which sets a variable by name if it's empty and exports it.
This makes the file less error-prone: the variable name is written just
once, making it safer to add more.
The
export "${varname?}"
form is to make ShellCheck happy, even if a simple `export $varname`
would perfectly work in this context.
The function is unset when it's not needed anymore to avoid polluting
the scope of whatever sources `utils.sh`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I6e25aa557f4d09f8129121b76b8b3a860ba3ed29
Philippe Proulx [Fri, 10 Nov 2023 05:24:48 +0000 (00:24 -0500)]
tests/utils/utils.sh: aerate the code
Have newlines above and below declarations and blocks to make the code
more readable.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If74eff4e029ab6fb92383bd2e2a2a12f77b913ff
Philippe Proulx [Fri, 10 Nov 2023 05:11:57 +0000 (00:11 -0500)]
tests/utils/utils.sh: remove unneeded curly braces around var. names
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I459172a3bec08534c69c3a7164f2f56d28f74564
Philippe Proulx [Fri, 10 Nov 2023 05:01:54 +0000 (00:01 -0500)]
tests/utils/utils.sh: remove unneeded quotes
Word splitting and globbing doesn't happen in those contexts.
Removing them makes the code easier to read.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I50f0a8a7c1190b81a1e97933e5fbc056d36def7f
Philippe Proulx [Fri, 10 Nov 2023 04:54:58 +0000 (23:54 -0500)]
tests/utils/utils.sh: _set_vars_srcdir_builddir(): use `&>`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibb84b1411c457a40f678cbdc6ae0d033215d657a
Philippe Proulx [Fri, 10 Nov 2023 04:47:14 +0000 (23:47 -0500)]
tests/utils/utils.sh: use `[[ ... ]]` instead of `[` or `test`
Even if `[` and `test` are Bash built-ins for POSIX shell backward
compatibility, `[[` has more features, and since we're using it at least
at once place, it makes sense to always use it in my opinion.
Also use `==` instead of `=`, the latter only existing for POSIX shell
backward compatibility, the former being like pretty much all the other
programming languages we use.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic3268e8d544bbbdf8f013ca3ca0659c4bc699d6d
Philippe Proulx [Fri, 10 Nov 2023 04:36:37 +0000 (23:36 -0500)]
tests/utils/utils.sh: gen_mctf_trace(): use an array for the command line
This removes the redundancy to both print and run the command line.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9100aa02c221e3699de726668a4de1d6b65ec2d9
Philippe Proulx [Fri, 10 Nov 2023 04:35:02 +0000 (23:35 -0500)]
tests/utils/utils.sh: gen_mctf_trace(): use `echo` instead of `diag`
This makes gen_mctf_trace() independent from needing `tap.sh` or not.
It's like what we do in bt_cli().
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8074f47309e3d02b6e533ae4e00fdf3edaa729b0
Philippe Proulx [Fri, 10 Nov 2023 04:32:47 +0000 (23:32 -0500)]
tests/utils/utils.sh: use `+=` instead of expanding the same variable
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I2843b2629e21bb645bd793a127eeaef64110723f
Philippe Proulx [Fri, 10 Nov 2023 04:30:06 +0000 (23:30 -0500)]
tests/utils/utils.sh: check_coverage() -> _bt_tests_check_coverage()
Make this function "private" (by name) as it's not intended that
whatever sources `utils.sh` use it directly (run_python_bt2_test() uses
it if `BT_TESTS_COVERAGE` is `1`).
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I6e75945eae067c08d6c8f2a3711b4c177608c3d1
Philippe Proulx [Fri, 10 Nov 2023 04:28:28 +0000 (23:28 -0500)]
tests/utils/utils.sh: bt_grep_ok(): only define if `SH_TAP` is `1`
This function uses ok() which comes from `tap.sh` which `utils.sh`
only sources if `SH_TAP` is `1`.
Therefore it makes no sense to run or even define this function if the
intention of whatever sources `utils.sh` isn't to output TAP directly.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia59ceadc9b74b2a2c5201def51d340d9050d944e
Philippe Proulx [Fri, 10 Nov 2023 04:25:55 +0000 (23:25 -0500)]
tests/utils/utils.sh: bt_diff_details_ctf_single(): remove unneeded `expected_stderr_file` var.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I565c108061b223404ab51bc5a2a0ad6da08fe7d5
Philippe Proulx [Fri, 10 Nov 2023 04:24:43 +0000 (23:24 -0500)]
tests/utils/utils.sh: bt_diff_cli(): return directly, don't use `ret`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I60257da865052146ca3b1bb3b10bcea02f4ff1d2
Philippe Proulx [Fri, 10 Nov 2023 04:22:01 +0000 (23:22 -0500)]
tests/utils/utils.sh: bt_diff(): remove useless `ret` var. and `return`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8970f29a926fbf7c707d3bf6a6516a36e6995679
Philippe Proulx [Fri, 10 Nov 2023 04:20:46 +0000 (23:20 -0500)]
tests/utils/utils.sh: use backticks to quote in printed messages
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I75a0e53663d96b2e6aea02d765fd4b3844db864c
Philippe Proulx [Fri, 10 Nov 2023 04:19:24 +0000 (23:19 -0500)]
tests/utils/utils.sh: gen_mctf_trace(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Id0b1f21a582c6742e153f869c917238867db2d61
Philippe Proulx [Fri, 10 Nov 2023 04:41:04 +0000 (23:41 -0500)]
tests/utils/utils.sh: run_python_bt2_test(): make `python_exec` var. local
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I05f7600cd60ba849ab20617d6354ddf07db4afa0
Philippe Proulx [Fri, 10 Nov 2023 04:19:10 +0000 (23:19 -0500)]
tests/utils/utils.sh: run_python_bt2_test(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I02bda233ecb271078c443cc4fdd53022dfdcfa90
Philippe Proulx [Fri, 10 Nov 2023 05:21:54 +0000 (00:21 -0500)]
tests/utils/utils.sh: run_python_bt2_test(): remove useless `test_runner_args` var.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ib2122628f627ba89e3e9f56597711c8498a8ea86
Philippe Proulx [Fri, 10 Nov 2023 04:18:21 +0000 (23:18 -0500)]
tests/utils/utils.sh: run_python_bt2(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia6f52dd7d41b84f567f0ec28bbe61d6c30d7caf2
Philippe Proulx [Fri, 10 Nov 2023 04:16:22 +0000 (23:16 -0500)]
tests/utils/utils.sh: bt_grep_ok(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ifbe0ccbd2c42d929331eb87e5f7743083d9c1a1a
Philippe Proulx [Fri, 10 Nov 2023 04:15:54 +0000 (23:15 -0500)]
tests/utils/utils.sh: bt_diff_details_ctf_gen_single(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I18c910ca25a680fde94528dbe3bf11f908b77b77
Philippe Proulx [Fri, 10 Nov 2023 04:15:02 +0000 (23:15 -0500)]
tests/utils/utils.sh: bt_diff_details_ctf_single(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Iaf6229b868111eb0870c023ebd4e030b28d01c2c
Philippe Proulx [Fri, 10 Nov 2023 04:14:34 +0000 (23:14 -0500)]
tests/utils/utils.sh: bt_diff_cli(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I87b7d665cfe7c1ae55afe85a3f743e3e15c03f51
Philippe Proulx [Fri, 10 Nov 2023 04:13:33 +0000 (23:13 -0500)]
tests/utils/utils.sh: bt_diff(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I7dbf856fdb7024c4586dc8cdd3e9a6a66d139b10
Philippe Proulx [Fri, 10 Nov 2023 04:12:59 +0000 (23:12 -0500)]
tests/utils/utils.sh: bt_cli(): use `local -r` when possible
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I999dd0d6f6781344db905aad46b5ff2ea6812be2
Philippe Proulx [Fri, 10 Nov 2023 04:09:32 +0000 (23:09 -0500)]
tests/utils/utils.sh: run_python_bt2(): remove unneeded env. var.
`BABELTRACE_PYTHON_BT2_NO_TRACEBACK` doesn't seem to be used anywhere in
the project: remove it.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie4623657def4aae573f92d02994900c55925b82e
Philippe Proulx [Fri, 10 Nov 2023 05:30:41 +0000 (00:30 -0500)]
tests/utils/utils.sh: don't export `BT_TESTS_ENABLE_ASAN`
It's only needed by run_python_bt2().
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5a634fc8dca4ac549ce0487879c36549dfa63dc8
Philippe Proulx [Fri, 10 Nov 2023 04:06:12 +0000 (23:06 -0500)]
tests/utils/utils.sh: use "private" variables if applicable
The non-exported `BT_PLUGINS_PATH` and `BT_TESTS_PYTHON_VERSION`
variables aren't directly needed by whatever sources `utils.sh` and its
subprocesses.
`BT_PLUGINS_PATH` is actually exported when calling run_python_bt2(),
for that specific case.
Make them more "private" by using the `_bt_tests_` prefix.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic48bb1de3f4d45fa39692241872bd2e7969ec858
Philippe Proulx [Fri, 10 Nov 2023 04:03:26 +0000 (23:03 -0500)]
tests/utils/utils.sh: use a function to source `env.sh`
By using a function to do this, we can use a local variable to hold the
`env.sh` path and therefore remove redundancy.
Disabling SC1090 because it's a non-constant source now, but it's
useless to add `source=` here because SC1091 is already disabled.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie449fd8f0cd04074b87b967d8b0ec719094f378c
Philippe Proulx [Fri, 10 Nov 2023 04:01:01 +0000 (23:01 -0500)]
tests/utils/utils.sh: quote command name when running it
Word splitting applies in this context.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I66842ef4e0621852d83456593492eff00bea5fe0
Philippe Proulx [Fri, 10 Nov 2023 03:56:05 +0000 (22:56 -0500)]
tests/utils/utils.sh: use a func. to set `BT_TESTS_{SRC,BUILD}DIR`
By using a function to set those, the `scriptdir` and `testsdir` can be
local and not leak into whatever sources `utils.sh`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I39277e4fe7810c787315a5a8aa9ca50a55be299b
Philippe Proulx [Fri, 10 Nov 2023 03:51:50 +0000 (22:51 -0500)]
tests/utils/utils.sh: improve comments
Add some, make some more readable, add details to some, stay within
72 columns.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9e4a5b59b89a5a8eed6ab595cd4d5cc79be99a47
Philippe Proulx [Thu, 9 Nov 2023 16:43:10 +0000 (11:43 -0500)]
tests/utils/env.sh.in: add comments and remove redundancy
This patch removes redundancy in `env.sh.in` by using a function which
sets a variable by name if it's empty and exports it.
This makes the file less error-prone: the variable name is written just
once, making it safer to add more.
The
export "${varname?}"
form is to make ShellCheck happy, even if a simple `export $varname`
would perfectly work in this context.
The function is unset at the end to avoid polluting the scope of
whatever sources `env.sh`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If392a6513b04b9e5fc2fd7b010b4071369e05b07
Simon Marchi [Mon, 29 Jan 2024 21:54:10 +0000 (16:54 -0500)]
tools/shellcheck.sh: allow overriding the shellcheck path
For an unknown (to me) reason, the shellcheck binary from the Arch Linux
package (version 0.9.0-79) hits this error:
$ tools/shellcheck.sh
...
Running ShellCheck on `./tests/cli/test-intersection.sh`
shellcheck: (Array.!): undefined array element
...
This looks like an error internal to shellcheck. When using the Linux
x86-64 binary from the release [1], it works fine. Add a way to
override the shellcheck binary in shellcheck.sh, to make working around
this easier:
$ SHELLCHECK=/home/smarchi/Downloads/shellcheck-v0.9.0/shellcheck tools/shellcheck.sh
... all fine !
[1] https://github.com/koalaman/shellcheck/releases/tag/v0.9.0
Change-Id: I81f0ea2e40b9dbac75e0b0debcce63338986358c
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11755
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Olivier Dion [Wed, 18 Oct 2023 15:02:30 +0000 (11:02 -0400)]
tests: add `src.ctf.fs` single field testing framework
This patch adds a framework to test the decoding of single CTF 1.8
fields by a `src.ctf.fs` component.
Single CTF 1.8 field tests reside as moultipart documents (see
`tests/utils/python/moultipart.py`) in
`tests/data/plugins/src.ctf.fs/field/ctf-1`.
The new `test-field.sh` script does the following, for each `pass-*.mp`
file found in `tests/data/plugins/src.ctf.fs/field/ctf-1`:
1. Creates a temporary directory TD to hold a CTF 1.8 trace (`TD/trace`)
and an expectation file (`TD/expect`).
2. Runs `data_from_mp.py` on the moultipart document, also passing TD.
This script splits the moultipart document to produce `TD/trace` and
`TD/expect`. The expected parts are, in this order:
a) A TSDL field class (metadata), without any field name, for
example:
integer { size = 32; byte_order = be; }
If you need to test the decoding of an array field, you may use
`@` in this part to indicate to `data_from_mp.py` where the
field name goes, for example:
string @[23]
b) A Normand [1] text representing the exact data of an instance
of a).
c) What you expect the `sink.test-text.single` component to print
when it receives an event message containing what a `src.ctf.fs`
component decoded from `TD/trace`.
`sink.test-text.single` prints exactly the value of b) with a
YAML-like format.
3. Runs something like this, keeping the standard output text:
$ babeltrace2 -c sink.test-text.single "TD/trace"
4. Compares the result of step 3 with `TD/expect` using bt_diff().
Now it becomes easy to test regular and corner cases of our CTF 1.8
decoding by adding new files to
`tests/data/plugins/src.ctf.fs/field/ctf-1`.
As initial examples, `tests/data/plugins/src.ctf.fs/field/ctf-1`
contains a few single field tests already.
Philippe changes:
• Made some style adjustments to the original patch.
• Using `mktemp -d` instead of `mktemp --directory` because macOS
doesn't seem to know the latter.
• In `utils.sh`, changed bt_diff() to use the new bt_remove_cr_inline()
to remove CR characters from both files because this is the first time
the test generates both files.
Leaving bt_remove_cr() as is because another test uses it directly.
• In the _print_field() function of `bt_plugin_test_text.py`:
‣ Changed parts of the strategy to fix some rendering bugs.
‣ Using int() for an integer field to avoid printing enum. labels.
‣ Added the empty structure field special case.
‣ Added comments with output examples.
• In `data_from_mp.py`:
‣ Added lots of useful TSDL type aliases available to any CTF 1
single field test.
‣ Made the default Normand byte order little-endian since it's also
the default TSDL byte order in _make_ctf_1_metadata().
• In `test-field.sh`, using a hard-coded test count.
See the Gerrit discussion [2] for the rationale.
• Added more initial tests in
`tests/data/plugins/src.ctf.fs/field/ctf-1`.
[1]: https://github.com/efficios/normand
[2]: https://review.lttng.org/c/babeltrace/+/11149
Change-Id: I7539b46d49200b5e75fe3525401b47b8ff418f6c
Signed-off-by: Olivier Dion <odion@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11149
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Wed, 7 Feb 2024 17:02:04 +0000 (12:02 -0500)]
Fix: `babeltrace2 convert`: don't consider the `--plugin-path` opt.
OBSERVED ISSUE
══════════════
When running the (default) `convert` command of the CLI and passing
`--plugin-path` _after_ a conversion argument, the program aborts:
$ babeltrace2 /some/path --plugin-path=/meow/mix
[1] 87823 IOT instruction (core dumped) babeltrace2 /some/path --plugin-path=/meow/mix
I expect such a command line to gracefully tell me that `--plugin-path`
is an unknown option.
CAUSE
═════
This is due to the `convert` command considering the general
`--plugin-path` option (part of the `convert_options` array), but then
not ignoring it during one of its passes.
`--plugin-path` is a general option, not a conversion option. Therefore,
it must not be part of `--plugin-path`.
SOLUTION
════════
Remove the `OPT_PLUGIN_PATH` entry from the `convert_options` array in
`babeltrace2-cfg-cli-args.c`.
The output of the command line above is now:
ERROR: [Babeltrace CLI] (babeltrace2.c:2655)
Command-line error: retcode=1
CAUSED BY [Babeltrace CLI] (babeltrace2-cfg-cli-args.c:1427)
While parsing `convert` command's command-line arguments: While
parsing argument #3
(`--plugin-path=data/plugins/src.ctf.fs/field/`): Unknown option
`--plugin-path`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8b22c5f732aae9fd1f3c989bd5aaef2d461d4160
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11756
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 6 Feb 2024 17:35:10 +0000 (17:35 +0000)]
lib: move graph/message/iterator.h -> graph/iterator.h
This file doesn't belong in the `message` directory, move it up one
level, next to `iterator.c`.
Change-Id: I096d91d5afa32ebb304b5132cad067e820f2bb30
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11749
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Tue, 6 Feb 2024 03:09:35 +0000 (22:09 -0500)]
cpp-common/vendor/optional-lite: bump to 3.6.0
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I81ff349fb55cd3d3a0474fcff13ef10a439b852c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11747
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Tue, 6 Feb 2024 03:55:51 +0000 (22:55 -0500)]
Update README.adoc
Notable changes:
‣ Fix broken LTTng CI links.
‣ Reword a few sentences to improve clarity.
‣ Use mostly "Babeltrace 2".
‣ Remove the sentence saying Babeltrace 2.0 is a "recent" release.
‣ Add an image (a conversion graph diagram) to maintain attention.
‣ Add a ToC, placing it at a specific location after the preamble when
GitHub renders.
‣ Add thanks to the authors of embedded projects.
‣ Mention `--enable-built-in-plugins` and
`--enable-built-in-python-plugin-support`.
‣ Transform the note in "Community" to regular text.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I487d781f435322652fde44cf1fed66f8a4d07c72
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11748
Philippe Proulx [Fri, 2 Feb 2024 20:34:03 +0000 (15:34 -0500)]
bt2c::Logger::_logStrNoThrow(): use `msg`, not `_mBuf.data()`
By chance those were always the same, but from the _logStrNoThrow()
point of view, it must use `msg`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie91ea9e6ff3b8f26c214904aaa9bd036b8dacfcb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11741
Philippe Proulx [Fri, 2 Feb 2024 20:19:24 +0000 (15:19 -0500)]
Fix: bt2c::Logger: include the `errno` message into an error cause too
The observed issue is that, when using a BT_CPPLOG_ERRNO*APPEND*()
macro, the logger logs the `errno` message (for example,
`Invalid argument`), but the message of the appended error cause doesn't
contain it.
This is because `bt2c::Logger` relies on bt_log_write_errno() to include
the `errno` message (bt_log_write_errno() is the one calling
g_strerror()).
To fix this, don't call bt_log_write_errno() anymore: consider `initMsg`
in the general private methods (like _logStrNoThrow()), and format an
introductory message (`initMsg`, `: `, and then the result of
g_strerror()) directly into the logErrno*() methods. See the new static
_errnoIntroStr().
The `_InitMsgLogWriter` writer makes the concatenation of `initMsg`
and `msg` using bt_log_write_printf():
bt_log_write_printf(funcName, fileName, lineNo,
static_cast<bt_log_level>(level), tag, "%s%s",
initMsg, msg);
`_StdLogWriter` ignores the `initMsg` parameter, but we only call it
when `initMsg` is an empty string anyway (I'm adding an assertion to
confirm that). For example, logStrNoThrow() calls _logStrNoThrow() with
`_StdLogWriter` and an empty `initMsg`. Same for `_MemLogWriter`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I50a0fda253b4cc2169dcdc91c84b80d251b3b82b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11740
Philippe Proulx [Fri, 2 Feb 2024 20:07:02 +0000 (15:07 -0500)]
logging/log-api.c: add newline between assertion and declaration
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I7426c7496a17f5e6cc958a578c755257895fc979
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11739
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Simon Marchi [Mon, 5 Feb 2024 16:42:03 +0000 (11:42 -0500)]
src/Makefile.am: add libcpp-common convenience library
Some following commits are expected to add .cpp files to the cpp-common
library. Turn it into a convenience libtool library.
Add a temporary dummy.cpp file, since some platforms don't like building
a library without at least one compiled source file.
Change-Id: I702b242ca2d229ab5064ba36d422368fd9a03909
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11715
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Wed, 31 Jan 2024 22:41:47 +0000 (17:41 -0500)]
cpp-common: add `bt2s::span` 0.11.0 and other related symbols
This patch adds `bt2s::span` which wraps `nonstd::span`, that is,
span lite [1], a project written by the author also who wrote our
`bt2s::optional` implementation, therefore I trust him.
span lite is an implementation of `std::span` [2] for C++98 and up:
> The class template `span` describes an object that can refer to a
> contiguous sequence of objects with the first element of the sequence
> at position zero.
This will be useful to pass some data block as a single parameter
without copying the viewed data (in other words, a pointer and a length
with some sugar such as operator[]() and the like).
[1]: https://github.com/martinmoene/span-lite
[2]: https://en.cppreference.com/w/cpp/container/span
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ife35b4be41536fec15aef9d6603a80746c3e8727
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11728
CI-Build: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Wed, 31 Jan 2024 22:37:49 +0000 (17:37 -0500)]
cpp-common/bt2s: use a `using` declaration
This is exactly the purpose of a `using` declaration, to make the symbol
from the `bpstd`/`nonstd` namespace accessible for unqualified lookup as
if declared in the `bt2s` namespace.
The code is much simpler.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8348f409a463b85f5b2ed1f1fd8f61adb404a6d9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/11727
Tested-by: jenkins <jenkins@lttng.org>
CI-Build: Simon Marchi <simon.marchi@efficios.com>
This page took 0.046247 seconds and 4 git commands to generate.