Commit graph

66 commits

Author SHA1 Message Date
Thibault Saunier 88fcc580be validate: Make extracheck and flow part of core instead plugins
It makes things more complex and doesn't bring anything!

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/204>
2020-06-03 11:07:15 -04:00
Thibault Saunier 124153fe06 validateflow: Allow specifying checksum type
And add an extra mode 'checksum-as-id' which basically numerate
buffers checksums as they are being received so that it is simpler
to compare expectations when you are tracking buffers from both
sinkpads and srcpads.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/202>
2020-05-31 17:17:22 -04:00
Thibault Saunier b1cf1ffebd validateflow: Add a way to configure when to generate expectations
By default, generate them whenever the file is missing but adding a way
to override that with `validateflow,generate-expectations=true` to force
regenerating them or setting `validateflow,generate-expectations=false`
to disallow generating them (on CI servers for example)

Also update the validateflow documentation to take that into account
and remove references to pipeline.json file which is now gone!

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/200>
2020-05-28 17:17:10 -04:00
Thibault Saunier cf0f1df314 flow: Use bat to color diffs when possible
Adding a function to check if can output colored logs

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/197>
2020-05-26 19:16:26 -04:00
Thibault Saunier b1e9e409fd validate: Enhance issue reporting from structures
And properly bail out when required
This is preparatory work for gst-test in core which will use the TAP
protocol

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/187>
2020-05-06 22:54:59 +00:00
Thibault Saunier a1a2efc970 validate:flow: Handle some more segment fields filtering
Those slept through when implementing filtering

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/188>
2020-05-05 23:09:31 -04:00
Thibault Saunier 04a648e345 ssim: Minor improvements on the way we attach to pads
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/174>
2020-04-30 12:40:13 -04:00
Thibault Saunier 66d29a31fd validate: Show the exact file line when error out in structure files
And minor stdout enhancements

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/185>
2020-04-29 08:33:21 -04:00
Thibault Saunier b7202e2f16 validate:flow: Sensibly improve stdout 2020-04-27 10:52:48 -04:00
Thibault Saunier 9b260a1ec6 validate: Plug some leaks
And add some valgrind suppression for fontconfig
2020-03-12 12:35:45 -03:00
Thibault Saunier a055c3272e validate:ssim: Allow specifying file framerate to use frame numbers during comparison 2020-03-12 12:35:45 -03:00
Thibault Saunier 06f6fd8de1 validatessim: Avoid having ':' in file names
This is unsupported on windows
2020-03-12 12:35:45 -03:00
Thibault Saunier 4ae29ab7ed validate:ssim: Enhance printing position
Adding a new `gst_validate_print_position` method which also
sends messages to the runner if required.
2020-03-12 12:35:45 -03:00
Thibault Saunier 30ceb4ef40 validate:ssim: Use stream time to reference frames 2020-03-11 16:36:20 -03:00
Thibault Saunier 78f2026467 validate:ssim: Avoid segfaults trying to attach pads without a template 2020-03-11 16:35:23 -03:00
Nirbheek Chauhan d0e6c8a78c validate: Don't use sprintf + glib format modifiers
We do not have a way to know the format modifiers to use with string
functions provided by the system. `G_GUINT64_FORMAT` and other string
modifiers only work for glib string formatting functions. We cannot
use them for string functions provided by the stdlib. See:
https://developer.gnome.org/glib/stable/glib-Basic-Types.html#glib-Basic-Types.description

```
 ../validate/plugins/flow/formatting.c: In function 'format_number':
../validate/plugins/flow/formatting.c:68:22: error: unknown conversion type character 'l' in format [-Werror=format=]
   sprintf (dest_str, "%" G_GUINT64_FORMAT, number);
                      ^~~
In file included from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib/gtypes.h:32,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib/galloca.h:32,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib.h:30,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/gstreamer-1.0/gst/gst.h:27,
                 from ../validate/plugins/flow/formatting.h:26,
                 from ../validate/plugins/flow/formatting.c:30:
/builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/lib/glib-2.0/include/glibconfig.h:69:28: note: format string is defined here
 #define G_GUINT64_FORMAT "llu"
                            ^
../validate/plugins/flow/formatting.c:68:22: error: too many arguments for format [-Werror=format-extra-args]
   sprintf (dest_str, "%" G_GUINT64_FORMAT, number);
                      ^~~
../validate/plugins/flow/formatting.c:68:22: error: unknown conversion type character 'l' in format [-Werror=format=]
In file included from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib/gtypes.h:32,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib/galloca.h:32,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/glib-2.0/glib.h:30,
                 from /builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/include/gstreamer-1.0/gst/gst.h:27,
                 from ../validate/plugins/flow/formatting.h:26,
                 from ../validate/plugins/flow/formatting.c:30:
/builds/nirbheek/cerbero/cerbero-build/dist/windows_x86_64/lib/glib-2.0/include/glibconfig.h:69:28: note: format string is defined here
 #define G_GUINT64_FORMAT "llu"
                            ^
../validate/plugins/flow/formatting.c:68:22: error: too many arguments for format [-Werror=format-extra-args]
   sprintf (dest_str, "%" G_GUINT64_FORMAT, number);
                      ^~~
```

Needed for https://gitlab.freedesktop.org/gstreamer/cerbero/merge_requests/419
2020-02-27 19:32:21 +05:30
Thibault Saunier db2acf1cdf validate:flow: Make field filtering in what is logged more generic
Instead of forcing it on event, allow specifying filters on anything
we log, meaning also buffers
2020-02-13 00:11:45 +00:00
Thibault Saunier 39d6c7760e validateflow: Add a logged-event-fields configuration 2020-02-13 00:11:45 +00:00
Thibault Saunier 5b82274f17 validate:flow: Add a way to set the types of events to log/ignore
Added two properties to the plugin:
     * ignored-event-types: A list of event types to be ignored when logging events
     * logged-event-types: A list of event types to be logged when logging events

This commits also moves the "ignored-event-fields" property to using a proper
GstValueList for the list of event fields to be taken into account, instead
of the home grown separated by comas list of string, making the API more
uniform.

This also adds a simple helper method: `gst_validate_utils_get_strv`
2020-02-04 16:09:36 -03:00
Edward Hervey 4f0bfcc7bb validate: Fix memory leaks
Various structures were being leaked.
2019-11-20 10:19:00 +01:00
Alicia Boya García deca1f9cbf validateflow: Don't use colon in file names
The colon character commonly used to separate the element name and the
pad name is reserved in Windows filesystems, so it's better to use
something safer.

This patch replaces it with '-'. Please update
gst-integration-testsuites too where another commit has renamed all the
files.
2019-10-25 13:23:52 +00:00
Tim-Philipp Müller 280321dee1 validate: remove autotools build 2019-10-15 00:24:00 +01:00
Matthew Waters 993b752816 validate/flow: fix werror build with android clang
../validate/plugins/flow/gstvalidateflow.c:75:3: error: redefinition of typedef 'ValidateFlowOverride' is a C11 feature [-Werror,-Wtypedef-redefinition]
} ValidateFlowOverride;
  ^
../validate/plugins/flow/gstvalidateflow.h:31:23: note: previous definition is here
G_DECLARE_FINAL_TYPE (ValidateFlowOverride, validate_flow_override,
                      ^
2019-08-28 18:33:32 +10:00
Matthew Waters 9249f60b70 validate: fix -Werror=unused-function with clang
[3623/4053] Compiling C object 'subprojects/gst-devtools/validate/plugins/flow/697521d@@gstvalidateflow@sha/gstvalidateflow.c.o'.
../subprojects/gst-devtools/validate/plugins/flow/gstvalidateflow.c:85:1: warning: unused function 'VALIDATE_IS_FLOW_OVERRIDE' [-Wunused-function]
G_DECLARE_FINAL_TYPE (ValidateFlowOverride, validate_flow_override,
^
/usr/include/glib-2.0/gobject/gtype.h:1407:26: note: expanded from macro 'G_DECLARE_FINAL_TYPE'
  static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) {                                         \
                         ^
<scratch space>:129:1: note: expanded from here
VALIDATE_IS_FLOW_OVERRIDE
^
2019-08-26 12:14:47 +00:00
Matthew Waters cca6ae3fdb validate: fix -Werror=format-nonliteral build with clang
[3470/4053] Compiling C object 'subprojects/gst-devtools/validate/gst/validate/28db7b6@@gstvalidatetracer@sha/gst-validate-reporter.c.o'.
../subprojects/gst-devtools/validate/gst/validate/gst-validate-reporter.c:186:31: warning: format string is not a string literal [-Wformat-nonliteral]
  message = g_strdup_vprintf (format, vacopy);
                              ^~~~~~
[3487/4053] Compiling C object 'subprojects/gst-devtools/validate/gst/validate/28db7b6@@gstvalidatetracer@sha/gst-validate-report.c.o'.
../subprojects/gst-devtools/validate/gst/validate/gst-validate-report.c:1007:34: warning: format string is not a string literal [-Wformat-nonliteral]
  tmp = gst_info_strdup_vprintf (format, args);
                                 ^~~~~~
[76/151] Compiling C object 'subprojects/gst-devtools/validate/plugins/flow/697521d@@gstvalidateflow@sha/gstvalidateflow.c.o'.
../subprojects/gst-devtools/validate/plugins/flow/gstvalidateflow.c:125:65: warning: format string is not a string literal [-Wformat-nonliteral]
  if (!flow->error_writing_file && vfprintf (flow->output_file, format, ap) < 0) {
                                                                ^~~~~~
2019-08-26 12:14:47 +00:00
Philippe Normand 83320610b2 validate/ssim: Clean-up temporary directory
When no output-dir is specified in the plugin config, a temporary directory is
created, so it needs to be removed when no-longer needed.
2019-08-21 11:50:03 +00:00
Thibault Saunier c28c0b5f98 validate:flow: Log buffers even when tracking srcpads 2019-06-26 12:09:03 -04:00
Thibault Saunier 25a7173b22 validateflow: Add buffers-checksum option to log buffers data checksum 2019-06-26 12:09:03 -04:00
Thibault Saunier 6e9b2c35ce ssim: Report critical issue when override not attached 2019-05-23 11:52:00 -04:00
Thibault Saunier 1e2bf1c841 ssim: Fix the way we handle when an override is attached 2019-05-23 11:35:28 -04:00
Thibault Saunier 0a7b23f566 doc: Port to hotdoc
Ideally we want a GstValidate hotdoc plugin... not for now.
2019-05-13 11:37:38 -04:00
Alicia Boya García e536b05e5a validateflow: Fail when a pad is not attached
Previously validateflow tests did not fail when the pad was not
attached.

This was a limitation caused by how the Validate API worked. Before, the
`notify::validate-runner` signal was not emitted until a monitor was
attached to the override. This made impossible to listen for the
runner's `stopping` signal.

This patch fixes the problem by setting `validate-runner` for all
existing overrides when the runner is initialized and adding checks in
validateflow to error in the case no pad was attached.
2019-03-15 17:38:15 +00:00
Thibault Saunier b61cb56e20 validate-flow: Add an ignored-event-fields configuration
It replaces `record-stream-id` as it is a more generic way of doing
the same thing.
2019-03-11 18:14:23 -03:00
Edward Hervey ec7cd5a092 validateflow: Use glib variant of strcmp
safer, and avoids missing include
2019-03-06 10:11:59 +01:00
Edward Hervey a750e3b540 validate: Include config.h before anything else
To avoid double-defines (such as GST_LEVEL_DEFAULT)
2019-03-04 15:20:49 +01:00
Charlie Turner 4602ee61c4 validateflow: Fix double-free on stdout 2019-02-18 11:05:26 +00:00
Thibault Saunier 5a2e2d5001 validateflow: Print some indication that the flow checking is happening 2019-02-11 08:34:36 -03:00
Edward Hervey 4467c9925d validate: Add autotools support for flow plugin 2019-02-11 11:09:46 +01:00
Alicia Boya García e96f2ca714 New validate plugin: validateflow
validateflow can be used to check the buffers and events flowing through
a custom pipeline match an expectation file. This can be used to test
non-regular-playback use cases like demuxers handling adaptive streaming
fragment pushing.

This patch includes also new actions used for these cases:
`appsrc-push`, `appsrc-eos` and `flush` (plus `checkpoint`, which is
only available with validateflow).
2019-02-07 18:19:22 +00:00
Matthew Waters 1559e1aec7 gst: allow building static libraries for e.g. Android/iOS 2018-12-10 16:47:50 +11:00
Wonchul Lee 955fc5fcce validate: Update for g_type_class_add_private() deprecation in recent GLib
https://gitlab.gnome.org/GNOME/glib/merge_requests/7
2018-09-20 15:16:16 -03:00
Sebastian Dröge 0b9218f23f validategtk: Stop using deprecated keymap API
gstvalidategtk.c:184:7: error: ‘gdk_keymap_get_default’ is deprecated: Use 'gdk_keymap_get_for_display' instead [-Werror=deprecated-declarations]
       gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (),
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2018-02-18 12:21:34 +02:00
Tim-Philipp Müller 6b661f394f meson: fix a few meson warnings
WARNING: The variable(s) 'DATADIR', 'LIBDIR' in the input file
  'subprojects/gst-devtools/validate/launcher/config.py.in' are not
  present in the given configuration data
WARNING: Passed invalid keyword argument "scanobj_args". This will
  become a hard error in the future.
WARNING: Keyword argument "install" defined multiple times. This
  will be a an error in future Meson releases.
2017-08-10 14:35:09 +01:00
Thibault Saunier 7463819969 validate: ssim: Do not compare unsigned to < 0
CID 1415473
2017-07-18 10:27:49 -04:00
Thibault Saunier b1b696017c validate: Add a plugin with potential extra checks
And add a way to check that a configured number of instances of a particular
element is used, this is useful to make sure for example that playing a
particular stream doesn't lead to several decoders being instanciated.
2017-06-16 17:36:34 -04:00
Thibault Saunier 9d3b760cf3 validate: Make Reporter.runner a MT safe weak reference
It can be used in any thread!
2017-06-01 16:57:50 -04:00
Thibault Saunier 86e9135b56 validate: Use GWeakRefs on monitor target and pipeline
Making it thread safe and more future proof (though having them point
to NULL might not be handled all around).

https://bugzilla.gnome.org/show_bug.cgi?id=782784
2017-06-01 16:57:50 -04:00
Thibault Saunier 8f123cbc6f validate: Make accessing Scenario.pipeline thread safe
The fact that Scenario.pipeline was not accessible in a thread way lead
to the fact that all users had to take the unref the last pipeline ref
in the main thread, otherwise we were crying. This was an ugly
restriction which lead to issue when using scenario on gst-rtsp-server.

This break the API as this commit remove the GstValidateScenario.pipeline
field but it is worth it.
2017-05-31 14:53:05 -04:00
Reynaldo H. Verdejo Pinochet 9d33d0ec9c validate: drop unneeded break+concat in some string literals
Perform other related improvements while at it.
2017-04-12 10:31:21 -07:00
Nicolas Dufresne bdd152484c Rename plugin filenames to match plugin names
- libgstvalidateplugin.so -> libgstvalidatetracer.so
- faultinjection -> validatefaultinjection
- gstvalidategtk -> validategtk
- ssim -> validatessim

https://bugzilla.gnome.org/show_bug.cgi?id=779344
2017-03-08 20:04:29 -05:00