Commit graph

415 commits

Author SHA1 Message Date
Thiago Santos
08aae8336b qa-runner: simplify runner to not hold refs to monitor/pipeline
The GstQaRunner is now a simple aggregator of reports that it receives
from monitors and filechecker. This allows it to be used in both
scenarios without  APIs that expect GstElement or Monitors, that are
only used on the pipeline monitoring QA tests.
2013-08-07 16:10:57 -03:00
Thiago Santos
61d39d6e74 file-checker: add file playback testing feature
Adds a property that triggers the file playback tests on
GstQaFileCheker. Also enable it in the gst-transcoding post file checks.

The implementation is simple, just create a playbin2 and use fakesinks
as sinks, set it to playing and wait for either EOS or ERROR messages.
2013-08-07 11:31:04 -03:00
Thiago Santos
b959a781a9 qa-reporter: fix typo 2013-08-06 19:42:21 -03:00
Thiago Santos
499f65a041 file-checker: include restriction caps tests when checking for profiles
Also move the caps check earlier on the path, to error out sooner and
avoid iterating the sub streams without needing
2013-08-06 19:42:09 -03:00
Thiago Santos
71351b3e33 file-checker: replace encoding profile comparison
Use our own custom comparison to allow to add more fine grained error
reporting. Also the encoding profile is_equal function is too strict as
it also compares profiles names, that doesn't matter to us.

This commit implementation is still initial and needs improvements as it
isn't using the restriction caps, which includes information that might not be
on the profile format caps.
2013-08-06 18:32:07 -03:00
Thiago Santos
e7853ec69f qa-reporter: fix crash by avoiding unref an integer 2013-08-06 10:37:15 -03:00
Thiago Santos
c81e6198f9 makefile: fix build of gst-qa- tools 2013-08-06 10:36:47 -03:00
Thiago Santos
cde09a7e6c file-checker: add error report and new report types
Add a list of new report types and use them in the file-checker.
The errors are mostly related to testing file attributes against
expected values
2013-08-06 10:36:02 -03:00
Thiago Santos
369e936b8f qa-file-checker: add a file checker object/runner
It is an object that is capable to run a few file checks. The
implemented tests are: file size, duration, if the file is seekable and
comparing the file stream types with a encoding profile
2013-08-05 14:16:06 -03:00
Thiago Santos
e5cafa3375 qa-scenario: adding eos scenario action
Allows sending EOS to the pipeline
2013-08-01 18:08:44 -03:00
Thiago Santos
caba58c029 qa-scenario: add new scenario action - Pause
The pause action instructs the pipeline to go to paused state and then
return to playing. It has the argument 'duration', that indicates the
duration for which the pipeline will remain in paused
2013-08-01 09:35:59 -03:00
Thiago Santos
60b0c7383f qa-scenario: refactor to accomodate more actions
Refactor to be able to reuse to add more actions to scenarios.
Planned are pauses and encoding changes
2013-08-01 01:27:20 -03:00
Thiago Santos
2901e35f5c qa-scenario: avoid assertion on dispose
After an error, the pipeline might still be null, check before unreffing
2013-07-31 15:01:13 -03:00
Thiago Santos
f1368356bc qa-scenario: fix typo on define variable 2013-07-31 15:00:56 -03:00
Thiago Santos
a395133aa2 qa-report: fix typo on assertion comparison 2013-07-31 15:00:33 -03:00
Vincent Penquerc'h
3a419c3fd8 gst-qa-element-monitor: do not bypass monitor factory
A pad monitor was created directly. Prefer going through the
factory.
2013-07-31 08:10:42 -03:00
Vincent Penquerc'h
5356f10644 gst-qa-reporter: fix use of uninitialized repeat field 2013-07-31 08:10:40 -03:00
Vincent Penquerc'h
711fa22a49 gst-qa-reporter: fix report leak when discarding repeated report 2013-07-31 08:10:37 -03:00
Vincent Penquerc'h
16bbbb5733 gst-qa: make tools depend on libraries
This fixes parallel build randomly breaking.
2013-07-31 08:10:27 -03:00
Thiago Santos
76679b1c7e qa-report: expose API for adding custom issues
expose gst_qa_issue_register and gst_qa_issue_new to allow applications
to register their own custom issues.

Issues IDs should use Areas higher than GST_QA_AREA_OTHER for custom
areas. And to add more issues to existing areas, the IDs should be
higher than GST_QA_ISSUE_ID_CUSTOM_FIRST.

Custom issues registering should be done at startup and from the same
thread as there is no locking around the issues hashtable
2013-07-30 17:07:13 -03:00
Thiago Santos
2034fb11d9 Fix typos 2013-07-30 16:21:15 -03:00
Thiago Santos
4e9bedcde8 qa-runner: Remove printing API from qa-runner
Replace it with functions to list the reports
2013-07-30 16:20:49 -03:00
Vincent Penquerc'h
4456e24cdf pad-monitor: fix NULL format string
An empty message should be an empty string.
2013-07-30 13:55:14 -03:00
Thiago Santos
2eba57d387 qa-runner: removing _setup call
Do setup on the _new function directly instead of having a separate
call for that
2013-07-30 10:21:32 -03:00
Thiago Santos
044084949a qa-override: add more pad overrides for buffer probe and caps
Add override functions for custom checking of buffer probe and
getcaps/setcaps functions.
2013-07-30 09:57:20 -03:00
Thiago Santos
55109ae7f9 pad-monitor: call the event/query/buffer overrides
Use the new event/buffer/query overrides to allow custom checks
on those scenarios
2013-07-30 09:41:06 -03:00
Thiago Santos
8a66b3d4ed qa-override: add callbacks for query/buffer/event functions
Add callbacks for pad event/buffer/query functions in case the
override wants to do additional checks
2013-07-30 09:41:05 -03:00
Vincent Penquerc'h
7fedf5a111 gst-qa-override-registry: load overrides dynamically
Shared objects listed in GST_QA_OVERRIDE are loaded on startup,
and the symbol gst_qa_create_overrides is run. It should create
any override needed. While it can do anything it wants, this
is discouraged.

GST_QA_OVERRIDE should be a comma separated list of shared objects,
any relative paths should be from the current working directory
at the time they are loaded (ie, if the process to be traced
changes cwd, use absolute paths).

No attempt whatsoever is made at not running what was not meant.

Includes a sample shared object for illustration purposes.
2013-07-30 09:41:00 -03:00
Thiago Santos
09fda8bbd2 qa-override-registry: register overrides by gtype and klass
Overrides can now be registerd by gtype, meaning that they will
be attached to monitors that the target is of the requested type.

Also by element klass, that will check that the element has the
selected class in its details
2013-07-29 13:17:50 -03:00
Thiago Santos
e0d041d67b qa-monitor: implement intercept_report
It is used to iterate over overrides and modify the report level if
the overrides wants to do so.

Also adds a new mutex only for the overrides to avoid deadlocks when
reporting if we used the same lock for iterating the overrides
2013-07-29 12:01:02 -03:00
Thiago Santos
f7d7d093e3 qa-reporter: fix copy n paste left over 2013-07-29 11:35:20 -03:00
Thiago Santos
79e7392a9c qa-reporter: add function for intercepting reports
after report creation, this function is called and implementers can
modify the report to their liking before it is posted to the runner
2013-07-29 11:34:42 -03:00
Vincent Penquerc'h
6e19324584 qa-monitor: chain gst_qa_monitor_finalize to parent's finalize
It was chaining to the parent's dispose.
2013-07-29 10:46:29 -03:00
Thiago Santos
3a13d59a1d gst-qa-report: put the correct format to avoid compiler warnings 2013-07-29 10:06:48 -03:00
Vincent Penquerc'h
2bac08370c i18n: copy necessary files in-tree 2013-07-29 09:57:25 -03:00
Vincent Penquerc'h
1c053ffda7 GstIssueId: make this uintptr_t
As it's used a a placeholder pointer for g_hash_table use,
it needs to be converted back and forth to a pointer.
2013-07-29 09:56:45 -03:00
Thiago Santos
dbc61a88b6 gst-qa-override-registry: adding the override-registry
This registry should contain the list of GstQaOverride to
be used on the pipelines being monitored
2013-07-29 09:53:54 -03:00
Thiago Santos
794ea2652d qa-override: adds qa-override that can change the report level of issues
Useful for customizing the level of issues for particular elements/tests
when they are more relevant or have to be disabled
2013-07-26 12:16:29 -03:00
Thiago Santos
773d8adc5e qa-report: splitting a GstQaReport into a GstQaIssue and GstQaReport
Reports now point to Issues, that are uniquely identified and have
translatable descriptions. This way we are going to be able to uniquely
identify the issues and applications can enable/disable checks for
specific elements.
2013-07-26 12:16:29 -03:00
Thibault Saunier
1e1e0b922e qa: Make it possible to set a scenario from the command line in test apps 2013-07-25 16:58:15 -03:00
Thibault Saunier
382fcc9a01 qa: Properly set reporter's runner reference
That was never set, but it is needed for the reporter to properly add
reports to the runner.
We still keep a reference on the monitor to make things simpler
2013-07-25 16:58:14 -03:00
Thibault Saunier
d804ad475a reporter: Use Gst debugging log in the _report method directly
Using __VALIST__ was not properly working
+ Add a gstqareporter debug category
2013-07-25 16:58:14 -03:00
Thibault Saunier
4fb8f47770 scenario: Implement the GstQaReporter interface and make use of it
This way we can report issues from a scenario
Also add a Seek aread to the known areas list

We now need to pass the runner to the scenario instead of the
pipeline as the GstQaReporter interface needs it.
2013-07-25 16:58:13 -03:00
Thibault Saunier
4992249848 qa: Add a GstQaReporter interface that objects needing reporting can implement
Various type of object should be able to do some reporting, so we have
to make sure all the code to do that is in one place. Creating an interface
makes it simple to share information and it avoid to have a baseclass for
something that is not actually important enough to create a baseclass.

Conflicts:
	gst/qa/gst-qa-pad-monitor.c
2013-07-25 16:57:44 -03:00
Thibault Saunier
7508e35b7e qa: Add a GstQaScenario class making it possible to execute scenarios
A scenario correspond to a suite of action to execute on a pipeline,
for the time being, we only support seeking the pipeline, but in the
future we can imagine doing some queries, setting pipeline state, etc...

The scenario can be loaded thanks to the GST_QA_SCENARIO environment
variable, making it usable with any existant application, in case, the
application can be used interactively, the user should either, not load
any scenario or let the application run without interacting with it.
2013-07-25 16:56:40 -03:00
Thiago Santos
4a3f06885a pad-monitor: add lots of locking
When handling elements that spawn multiple threads (hardware
enc/decoders), the pad monitor has to protect its variables specially
because some checks involve iterating over internally linked pads to
add/get some data for comparison (expected events, timestamp ranges,
caps).

Aside from locking its own mutex, the pad monitor can also lock the
parent's mutex when it needs to use data from its internally linked
pads. The locking order should always be parent and then individual
pad-monitor mutexes. This should prevent deadlocks when multiple
pad-monitors from the same element start doing checks at the same time
from different threads.
2013-07-24 16:16:07 -03:00
Thiago Santos
48c49f5071 pad-monitor: remove already solved TODOs 2013-07-24 10:05:31 -03:00
Thiago Santos
887afecc22 pad-monitor: accept unexpected flow return if pad is eos
Track eos event and mark that pad as eos so that checking for the
flow return knows when 'unexpected' is acceptable
2013-07-24 10:05:23 -03:00
Thiago Santos
b5f31f0c8c pad-monitor: improve caps proxying check on getcaps
Only check if fields are proxied for sink getcaps as it is when
downstream restrictions should be proxied. Also improve the
fields comparison to handle single value x multi value
(list/array/range) contain relations.
2013-07-23 15:18:51 -03:00
Thiago Santos
6ebded71e2 pad-monitor: improve type conformance checking for caps
Replace the macro with a more powerful variadic function that can
check for more acceptable types for the same caps.

This removes a few more false positives
2013-07-23 15:16:35 -03:00
Thiago Santos
c9955c14e4 pad-monitor: only expect a new segment if pad is running on push mode
For pull mode, it should just provide the buffers, regardless of getting
a new segment or not
2013-07-23 12:52:22 -03:00
Edward Hervey
d7b2977657 gst-qa: show help and exit when no arguments are provided
Instead of attempting to create empty pipelines and weird things
happening :)
2013-07-23 12:14:26 -03:00
Thiago Santos
04b3517e41 pad-monitor: fix flushes checking
flush events shouldn't fail, so we don't need to rollback when it
returns false from downstream (this is common when downstream is still
not-linked) and it would cause gst-qa to spit false positives.

Also refactor the common event handling for both sink and src event
functions into a common place. Currently we handle flushes the same
for both pad's directions
2013-07-23 12:11:08 -03:00
Thiago Santos
d8fa81eeff pad-monitor: only merge caps if they exist
Downtream can not be linked, so we shouldn't try to merge
NULL caps
2013-07-23 11:51:07 -03:00
Thiago Santos
11cc2e6b3b pad-monitor: fix expected setcaps fields comparison
Use the correct structure when getting the GValues and print different
messages for missing and different fields on the setcaps caps
2013-07-22 20:09:35 -03:00
Thiago Santos
363de0e555 pad-monitor: improve timestamp ranges comparison message a little
Show the buffer range that is being compared.
2013-07-22 20:09:07 -03:00
Thiago Santos
e94427e639 pad-monitor: add check for serialized events order
Store expected serialized events and their 'timestamps' to check if
they are pushed in the same order/time as they were received
2013-07-22 15:05:04 -03:00
Thiago Santos
c650034fb4 pad-monitor: add check for setcaps passing audio/video fields
Checks that the common audio/video fields are correctly passed
downstream after a setcaps
2013-07-22 09:50:23 -03:00
Thiago Santos
0aaf23cb0f pad-monitor: add check for getcaps proxying audio/video fields
Checks that the common audio/video fields are correctly proxied by
the elements after a getcaps
2013-07-19 16:52:45 -03:00
Thiago Santos
694935fdea element-monitor: add is_encoder flag
Easy access to knowing if the monitored element is an encoder
2013-07-19 16:52:11 -03:00
Thibault Saunier
ab98bd242e qa-transcoding: Add a binary program to easily test transcoding 2013-07-19 11:16:47 -03:00
Thibault Saunier
799b7a8c3e monitor(s): Avoid trying to disconnect handlers on instances that do not exist anymore 2013-07-19 11:15:54 -03:00
Thibault Saunier
0127706e09 qa-report: Avoid reporting tons of times the exact same issue to users
Some of the issue can be reported once and for all. We are here avoiding to flood the
user with the same information repeated infinitely.
2013-07-19 11:15:53 -03:00
Thibault Saunier
affddfe626 qa-pad-monitor: Do not use gst_private.h 2013-07-19 11:15:52 -03:00
Thiago Santos
a7353e988b pad-monitor: improve timestamp ranges check
Keep the full range stored by the element in the monitor and check
if outgoing timestamps are within that range. It is simple and
should generally work.
2013-07-19 09:57:07 -03:00
Thiago Santos
a11cc64f90 pad-monitor: fix combined flow checks
We can only check if we found a downstream monitor
2013-07-18 14:49:23 -03:00
Thiago Santos
16b1d750c8 pad-monitor: fix caps field type checks
The type is GstValueList and not GArray
2013-07-18 14:49:01 -03:00
Thiago Santos
9d7f9cfa54 pad-monitor: improve report messages with arguments 2013-07-18 14:48:46 -03:00
Thibault Saunier
eebb3522bf qa-report: Pass the whole monitor when creating a report
So we have the proper source name already avalaible and in the future
we might need some more informations about the monitor itself.
2013-07-18 13:43:29 -03:00
Thibault Saunier
dd672acf8b qa-pad-monitor: Properly set target_name with as much info as possible 2013-07-18 13:43:28 -03:00
Thibault Saunier
cb4792a8e5 qa-monitor: Add a target name field that can be used even when the target is freed 2013-07-18 13:43:25 -03:00
Thibault Saunier
d1508ce651 qa-monitor: Make the reference to the target a weak reference 2013-07-18 13:43:23 -03:00
Thiago Santos
d0272be23b qa-report: add debug flags for criticals
Allows the user to enable program abort if a report
is created with a certain level.

Use:
GST_QA=fatal_criticals,fatal_warnings,fatal_issues
2013-07-18 12:22:43 -03:00
Thibault Saunier
4b808aeb81 qa-report: Do not keep a ref to the source but keep its name instead
We currently do not need to access the object source after its creation
but we need to be able to have a usefull for debugging name.
2013-07-18 12:15:24 -03:00
Thibault Saunier
7faac43afb qa-runner: Add a 'report-added' signal
So it is possible to plug into the runner to get information about
what is going from outside of it.
2013-07-18 12:15:24 -03:00
Thibault Saunier
5f62fd2e2a qa-report: Make it a boxed type
And make it refcounted, in 1.0 it should become a GstMiniObject, for
now, it is enough that way.

The goal is to be able to use it in signals
2013-07-18 12:15:24 -03:00
Thibault Saunier
440d20ed00 qa-monitor: Allow detaill message to be in printf format
So we can give proper informations about what is wrong to users
2013-07-18 12:15:24 -03:00
Thiago Santos
84b9b654e1 qa-monitor-preload: fix preload to work with pipeline creation
Wrap around the main gstreamer pipeline creation functions as wrapping
g_object_new requires rebuilding glib.
2013-07-17 21:46:37 -03:00
Thiago Santos
4db12b8a76 pad-monitor: fix copy n paste mistake
Do not use GstFlowReturn where a boolean is expected
2013-07-17 20:40:50 -03:00
Thiago Santos
f90e164038 pad-monitor: fix initialization of timestamp ranges 2013-07-17 20:40:38 -03:00
Thiago Santos
9c958417e2 pad-monitor: check that returns are combined properly
When getting a return from a sink pad, check that it combines properly
the current returns from downstream source pads
2013-07-17 17:57:39 -03:00
Thiago Santos
425e608456 pad-monitor: verify that pushed segment matches what was received
Check that src pads push segments that are compatible with what
was received on the sink pads
2013-07-17 14:36:44 -03:00
Thiago Santos
bd22bb8d1c pad-monitor: output timestamps should be in range of received ones
Checks if the timestamps of pushed buffers are in the range of the
received buffer timestamps;
2013-07-17 11:49:39 -03:00
Thiago Santos
0b90e7bddd pad-monitor: add check for out of segment buffers 2013-07-17 00:33:42 -03:00
Thiago Santos
c53b10e5c5 pad-monitor: track current buffer timestamp and duration
This can be used to make sure outgoing buffers match the input
timestamps
2013-07-17 00:30:21 -03:00
Thiago Santos
9a82afbc87 pad-monitor: check for when a flush start isn't expected
Complain when an unexpected flush-start is received
2013-07-17 00:29:38 -03:00
Thiago Santos
c942eabbfd pad-monitor: add checks for raw caps completeness
Check audio and video raw caps returned from getcaps for expected
fields and types
2013-07-17 00:29:04 -03:00
Thiago Santos
fbd6aa1359 qa-monitor: Fix typo in printf format for report debug messages
Stringify the arguments correctly for printing
2013-07-17 00:25:11 -03:00
Thiago Santos
6677b5a574 pad-monitor: first buffer checks
Check that a newsegment is received before the first buffer and that
the first buffer running time is 0
2013-07-16 23:19:13 -03:00
Thiago Santos
4e84ad6513 qa-report: rework qa-report API
Remove error from GstQaErrorReport, making it only GstQaReport. Add
 a level and use area and subarea code, with an extra string for message
 adding details.

Provide macros on qa-monitor to make it easy to create reports.
2013-07-16 21:15:09 -03:00
Thiago Santos
d1fde6f4cf pad-monitor: add stubs for getcaps/setcaps function wrapping 2013-07-16 09:17:44 -03:00
Thiago Santos
95f81d7240 pad-monitor: add check for out of segment buffer data 2013-07-16 08:06:27 -03:00
Thiago Santos
a60c2efe4a qa-report: use gst_util_get_timestamp for report times
Makes it more aligned with GST_DEBUG output
2013-07-15 10:15:06 -03:00
Thiago Santos
e96db7dbfa pad-monitor: split event checks for src and sink pads
Keeping those handlers separate should keep the code smaller and
easier to understand
2013-07-15 09:27:34 -03:00
Thiago Santos
cb6b45d375 qa-monitor: add parent relation for monitors
This is useful because Pad monitors will have to ask the
parent element monitors for some element details for
doing checks
2013-07-12 16:02:25 -03:00
Thiago Santos
d314df2040 qa-element-monitor: check if the element is a decoder
This can be used on checks for timestamps being inside segment
2013-07-12 15:47:16 -03:00
Thiago Santos
6f2dbf1486 pad-monitor: add probes for src pads
To be used for further monitoring events and buffers for
src pads
2013-07-12 14:47:29 -03:00
Thiago Santos
0bc7ae9aeb qa-report: add a timestamp to error reports 2013-07-12 13:32:08 -03:00
Thiago Santos
3476fffd54 qa-report: adds qa-report for reporting errors to GstQaRunner
The errors are printed directly to stdout and are accumulated at
GstQaRunner for being printed at the end if requested
2013-07-12 12:43:07 -03:00
Thiago Santos
5250ed4331 qa-monitor-preload: add functions to allow ld-preload to wrap pipelines
The preload functions wrap functions that can create pipelines and
attaches a runner to them for monitoring
2013-07-12 11:44:34 -03:00
Thiago Santos
aeacc4270b qa-monitor: add runner property
runner stores the GstQaRunner that will receive the error reports
from the monitors
2013-07-12 00:41:43 -03:00
Thiago Santos
08180f3a4c pad-monitor: make it able to initialize a segment
Do not take the initial format set to TIME too seriously when we
haven't got any newsegment event yet. If it is the first segment
received, switch our internal segment tracker to the event format
2013-07-11 13:45:43 -03:00
Thiago Santos
7de70978cf gst-qa: add seek-tests option
The seek-tests does a simple seeking after the pipeline has started
so that seeking checks can be performed by the monitors
2013-07-11 13:41:25 -03:00
Thiago Santos
c3c1d2e68c pad-monitor: track some events
Segments, upstream seeks and flushes. Adding the following checks:

* A flush stop is expected after a flush start
* After a seek, the flushes/segment seqnum should be the same as the seek
2013-07-11 12:55:17 -03:00
Thiago Santos
7ba50106f2 pad-monitor: only set pad functions if they exist on the pad
Some functions should only be set on pads if they were originally
set, like the GetRange, Chain and BufferAlloc
2013-07-11 00:06:14 -03:00
Thiago Santos
5ac4579358 qa-bin-monitor/element-monitor: implement pad/element wrapping
Add code that creates new monitors when elements/pads are found
in bin and element monitors
2013-07-11 00:04:41 -03:00
Thiago Santos
ac66ed48fa qa-monitor: fix various start up issues
Fix reference count for monitored object, passing of constructor
parameter and base monitor property flag
2013-07-11 00:03:54 -03:00
Thiago Santos
1e9b4311c9 pad-monitor: instrument to monitor buffer/event/query/alloc flows
Replace pad functions with monitor functions that can do pre/post
checks and call the original functions
2013-07-10 18:54:57 -03:00
Thiago Santos
ce0e8ab697 qa-monitor: add base class for monitors
The base class adds a 'object' property to hold the monitored object,
it can only be set on construction. Also the constructor now
automatically calls the element set up
2013-07-10 14:15:57 -03:00
Thiago Santos
e04fe10eab qa-bin-monitor: adds a bin monitor
Extends element-monitor to also wrap child elements
2013-07-09 19:20:55 -03:00
Thiago Santos
339ce21a86 qa: renaming Wrapper -> Monitor 2013-07-09 17:38:47 -03:00
Thiago Santos
9b5893b0cd qa-pad-wrapper: adds stub class for pad QA wrapper
Also fixes _new functions to ref the elements intead of
ownership transfers
2013-07-09 16:52:02 -03:00
Thiago Santos
6f2fd90736 qa-element-wrapper: add code for iterating and monitoring pads creation
This will be used to create the wrappers for pads
2013-07-09 16:39:38 -03:00
Thiago Santos
4869921198 gitignore: ignore gst-qa binary 2013-07-09 16:13:00 -03:00
Thiago Santos
7caf6e025f qa: adds gst-qa binary and basic classes to run the QA tests
The classes are mostly a stub for now, but the gst-qa already
has a minimum to start them;
2013-07-09 16:08:30 -03:00