Replacing mentions of qa with validate

This commit is contained in:
Thiago Santos 2013-09-02 13:22:51 -03:00
parent cc65145eb1
commit 2e216818bd
11 changed files with 93 additions and 86 deletions

View file

@ -1,2 +1,2 @@
If you are looking for informations on how to use gst-qa -> docs/qa-usage.txt
If you are looking for informations on gst-qa design -> docs/qa-design.txt
If you are looking for informations on how to use gst-validate -> docs/validate-usage.txt
If you are looking for informations on gst-validate design -> docs/validate-design.txt

View file

@ -1,4 +1,4 @@
scenariosdir=${datadir}/gstreamer-$(GST_API_VERSION)/qa-scenario
scenariosdir=${datadir}/gstreamer-$(GST_API_VERSION)/validate-scenario
scenarios_DATA = simple_seeks.scenario \
seek_forward.scenario \
seek_backward.scenario \

View file

@ -1,34 +0,0 @@
=== Testing with monitors
Using gst-qa monitors is quite simple, there are 2 ways to test your
pipeline/element.
== Creating the monitors yourself
This method requires writing a specific application (or modifying yours) to
add GstQaMonitors and GstQaRunner to it. Create a GstQaRunner with
gst_qa_runner_new, then use gst_qa_monitor_factory_create to create monitors
for your pipeline.
Now all you have to do is use your pipeline as usual, the reports will be
created and posted to the runner. You can list them after the pipeline
finishes to look at the issues found.
== Using LD_PRELOAD and an existing application
If you want to test an already existing application without modifying it. Just
use:
LD_PRELOAD=path/to/libgstqa.so yourapp ...
gst-qa will try to replace GstPipeline creating functions and already
configure runners and monitors for you, reports will be printed to stderr when
they are found.
=== Using the file checker
The GstQaFileChecker is a convenient API to compare a media file properties
with its expected properties. The uri of the file to be tested and the
expected values can be configured via gobject properties.
gst_qa_file_checker_run is used to start the tests.
There is also a convenience tool (gst-qa-file-check) that can be used to
run the file checker.

View file

@ -1,33 +1,33 @@
== Main components
Gst-qa is composed of 4 parts: the issues, the reports, the runner and the
reporters.
Gst-validate is composed of 4 parts: the issues, the reports, the runner and
the reporters.
= Issue
Gst-QA's main target is finding problems in GStreamer elements/pipelines. To
make it easier to track down exactly what happens, the tests run by Gst-QA use
an extensible list of 'Issues'. Each Issue describes a potential error
situation and has an unique ID and a severity level.
Gst-Validate's main target is finding problems in GStreamer elements/pipelines.
To make it easier to track down exactly what happens, the tests run by
Gst-Validate use an extensible list of 'Issues'. Each Issue describes a
potential error situation and has an unique ID and a severity level.
The issues list can be extended by 3rd party libraries if specific needs
should be met.
= Reporters
A reporter is the object that implements the GstQaReporter interface and is
responsible for performing tests on some target element/scenario. The reporter
is able to create 'Reports' whenever a test it executes fails.
A reporter is the object that implements the GstValidateReporter interface and
is responsible for performing tests on some target element/scenario. The
reporter is able to create 'Reports' whenever a test it executes fails.
= Reports
The GstQaReports are created whenever a test fails, they are posted to the
stderr and also are posted to the GstQaRunner for accumulation.
The GstValidateReports are created whenever a test fails, they are posted to the
stderr and also are posted to the GstValidateRunner for accumulation.
Each report contains information about the object that generated the issue,
the issue associated with the report and a specific debug message for the case,
this helps tracking down the problem and fixing it.
= Runner
The GstQaRunner is the point of communication for the app to gst-qa
The GstValidateRunner is the point of communication for the app to gst-validate
monitoring. It provides an API to gather reports and to make them acessible
to the application.
@ -38,20 +38,20 @@ The monitors are used to wrap around pipelines (and elements and pads) and
attach to their data flow handling functions to be able to intercept the data
and compare it with the expected behaviors. There are 3 types of monitors:
* GstQaElementMonitor
* GstQaBinMonitor
* GstQaPadMonitor
* GstValidateElementMonitor
* GstValidateBinMonitor
* GstValidatePadMonitor
All 3 inherit from the base GstQaMonitor class. Their name suggest what they
monitor and they have a relationship to their children and parents. A bin
All 3 inherit from the base GstValidateMonitor class. Their name suggest what
they monitor and they have a relationship to their children and parents. A bin
monitor has, possibly, child element monitors and element monitors have child
pad monitors. The monitors are responsible for listening to new children added
to their monitored object and creating monitors for them. For example, element
monitors listen to element's pad-added signal and create pad monitors whenever
a new pad is added.
Most (if not all) the checks are implemented at the GstQaPadMonitor, as it is
where the data flow happens.
Most (if not all) the checks are implemented at the GstValidatePadMonitor,
as it is where the data flow happens.
= FileChecker
The file checker is another reporter that is used to make sure a file has a

View file

@ -0,0 +1,34 @@
=== Testing with monitors
Using gst-validate monitors is quite simple, there are 2 ways to test your
pipeline/element.
== Creating the monitors yourself
This method requires writing a specific application (or modifying yours) to
add GstValidateMonitors and GstValidateRunner to it. Create a GstValidateRunner
with gst_validate_runner_new, then use gst_validate_monitor_factory_create to
create monitors for your pipeline.
Now all you have to do is use your pipeline as usual, the reports will be
created and posted to the runner. You can list them after the pipeline
finishes to look at the issues found.
== Using LD_PRELOAD and an existing application
If you want to test an already existing application without modifying it. Just
use:
LD_PRELOAD=path/to/libgstvalidatepreload.so yourapp ...
gst-validate will try to replace GstPipeline creating functions and already
configure runners and monitors for you, reports will be printed to stderr when
they are found.
=== Using the file checker
The GstValidateFileChecker is a convenient API to compare a media file
properties with its expected properties. The uri of the file to be tested and
the expected values can be configured via gobject properties.
gst_validate_file_checker_run is used to start the tests.
There is also a convenience tool (gst-validate-file-check) that can be used to
run the file checker.

View file

@ -46,7 +46,7 @@ gst_validate_bin_monitor_wrap_element (GstValidateBinMonitor * monitor,
static gboolean gst_validate_bin_monitor_setup (GstValidateMonitor * monitor);
static void
_qa_bin_element_added (GstBin * bin, GstElement * pad,
_validate_bin_element_added (GstBin * bin, GstElement * pad,
GstValidateBinMonitor * monitor);
static void
@ -113,7 +113,7 @@ gst_validate_bin_monitor_new (GstBin * bin, GstValidateRunner * runner,
{
GstValidateBinMonitor *monitor =
g_object_new (GST_TYPE_VALIDATE_BIN_MONITOR, "object",
bin, "qa-runner", runner, "qa-parent", parent, NULL);
bin, "validate-runner", runner, "validate-parent", parent, NULL);
if (GST_VALIDATE_MONITOR_GET_OBJECT (monitor) == NULL) {
g_object_unref (monitor);
@ -145,7 +145,7 @@ gst_validate_bin_monitor_setup (GstValidateMonitor * monitor)
bin_monitor->element_added_id =
g_signal_connect (bin, "element-added",
G_CALLBACK (_qa_bin_element_added), monitor);
G_CALLBACK (_validate_bin_element_added), monitor);
iterator = gst_bin_iterate_elements (bin);
done = FALSE;
@ -195,7 +195,7 @@ gst_validate_bin_monitor_wrap_element (GstValidateBinMonitor * monitor,
}
static void
_qa_bin_element_added (GstBin * bin, GstElement * element,
_validate_bin_element_added (GstBin * bin, GstElement * element,
GstValidateBinMonitor * monitor)
{
g_return_if_fail (GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT (monitor) ==

View file

@ -51,7 +51,7 @@ static GstElement *gst_validate_element_monitor_get_element (GstValidateMonitor
* monitor);
static void
_qa_element_pad_added (GstElement * element, GstPad * pad,
_validate_element_pad_added (GstElement * element, GstPad * pad,
GstValidateElementMonitor * monitor);
static void
@ -103,7 +103,7 @@ gst_validate_element_monitor_new (GstElement * element,
g_return_val_if_fail (element != NULL, NULL);
monitor = g_object_new (GST_TYPE_VALIDATE_ELEMENT_MONITOR, "object", element,
"qa-runner", runner, "qa-parent", parent, NULL);
"validate-runner", runner, "validate-parent", parent, NULL);
if (GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT (monitor) == NULL) {
g_object_unref (monitor);
@ -164,7 +164,7 @@ gst_validate_element_monitor_do_setup (GstValidateMonitor * monitor)
gst_validate_element_monitor_inspect (elem_monitor);
elem_monitor->pad_added_id = g_signal_connect (element, "pad-added",
G_CALLBACK (_qa_element_pad_added), monitor);
G_CALLBACK (_validate_element_pad_added), monitor);
iterator = gst_element_iterate_pads (element);
done = FALSE;
@ -212,7 +212,7 @@ gst_validate_element_monitor_wrap_pad (GstValidateElementMonitor * monitor,
}
static void
_qa_element_pad_added (GstElement * element, GstPad * pad,
_validate_element_pad_added (GstElement * element, GstPad * pad,
GstValidateElementMonitor * monitor)
{
g_return_if_fail (GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT (monitor) ==

View file

@ -123,13 +123,13 @@ gst_validate_monitor_class_init (GstValidateMonitorClass * klass)
GST_TYPE_OBJECT, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_RUNNER,
g_param_spec_object ("qa-runner", "VALIDATE Runner",
g_param_spec_object ("validate-runner", "VALIDATE Runner",
"The Validate runner to " "report errors to",
GST_TYPE_VALIDATE_RUNNER,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_VALIDATE_PARENT,
g_param_spec_object ("qa-parent", "VALIDATE parent monitor",
g_param_spec_object ("validate-parent", "VALIDATE parent monitor",
"The Validate monitor " "that is the parent of this one",
GST_TYPE_VALIDATE_MONITOR,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));

View file

@ -553,7 +553,7 @@ gst_validate_pad_monitor_new (GstPad * pad, GstValidateRunner * runner,
GstValidateElementMonitor * parent)
{
GstValidatePadMonitor *monitor = g_object_new (GST_TYPE_VALIDATE_PAD_MONITOR,
"object", pad, "qa-runner", runner, "qa-parent",
"object", pad, "validate-runner", runner, "validate-parent",
parent, NULL);
if (GST_VALIDATE_PAD_MONITOR_GET_PAD (monitor) == NULL) {
@ -716,7 +716,8 @@ static void
otherpad = g_value_get_object (&value);
GST_DEBUG_OBJECT (monitor->pad, "Checking pad %s:%s input timestamps",
GST_DEBUG_PAD_NAME (otherpad));
othermonitor = g_object_get_data ((GObject *) otherpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) otherpad, "validate-monitor");
GST_VALIDATE_MONITOR_LOCK (othermonitor);
if (gst_validate_pad_monitor_timestamp_is_in_received_range
(othermonitor, ts)
@ -855,7 +856,8 @@ gst_validate_pad_monitor_check_aggregated_return (GstValidatePadMonitor *
otherpad = g_value_get_object (&value);
peerpad = gst_pad_get_peer (otherpad);
if (peerpad) {
othermonitor = g_object_get_data ((GObject *) peerpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) peerpad, "validate-monitor");
if (othermonitor) {
found_a_pad = TRUE;
GST_VALIDATE_MONITOR_LOCK (othermonitor);
@ -934,7 +936,8 @@ static void
switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
otherpad = g_value_get_object (&value);
othermonitor = g_object_get_data ((GObject *) otherpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) otherpad, "validate-monitor");
if (othermonitor) {
SerializedEventData *data = g_slice_new0 (SerializedEventData);
data->timestamp = last_ts;
@ -990,7 +993,8 @@ gst_validate_pad_monitor_otherpad_add_pending_field (GstValidatePadMonitor *
switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
otherpad = g_value_get_object (&value);
othermonitor = g_object_get_data ((GObject *) otherpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) otherpad, "validate-monitor");
if (othermonitor) {
GST_VALIDATE_MONITOR_LOCK (othermonitor);
g_assert (othermonitor->pending_setcaps_fields != NULL);
@ -1033,7 +1037,8 @@ gst_validate_pad_monitor_otherpad_clear_pending_fields (GstValidatePadMonitor *
switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
otherpad = g_value_get_object (&value);
othermonitor = g_object_get_data ((GObject *) otherpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) otherpad, "validate-monitor");
if (othermonitor) {
GST_VALIDATE_MONITOR_LOCK (othermonitor);
g_assert (othermonitor->pending_setcaps_fields != NULL);
@ -1077,7 +1082,8 @@ gst_validate_pad_monitor_add_expected_newsegment (GstValidatePadMonitor *
switch (gst_iterator_next (iter, &value)) {
case GST_ITERATOR_OK:
otherpad = g_value_get_object (&value);
othermonitor = g_object_get_data ((GObject *) otherpad, "qa-monitor");
othermonitor =
g_object_get_data ((GObject *) otherpad, "validate-monitor");
GST_VALIDATE_MONITOR_LOCK (othermonitor);
if (othermonitor->expected_segment) {
GST_VALIDATE_REPORT (othermonitor, EVENT_NEWSEGMENT_NOT_PUSHED, "");
@ -1370,7 +1376,7 @@ gst_validate_pad_monitor_chain_func (GstPad * pad, GstObject * parent,
GstBuffer * buffer)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
GstFlowReturn ret;
GST_VALIDATE_PAD_MONITOR_PARENT_LOCK (pad_monitor);
@ -1425,7 +1431,7 @@ gst_validate_pad_monitor_sink_event_func (GstPad * pad, GstObject * parent,
GstEvent * event)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
gboolean ret;
GST_VALIDATE_PAD_MONITOR_PARENT_LOCK (pad_monitor);
@ -1483,7 +1489,7 @@ gst_validate_pad_monitor_src_event_func (GstPad * pad, GstObject * parent,
GstEvent * event)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
gboolean ret;
GST_VALIDATE_MONITOR_LOCK (pad_monitor);
@ -1498,7 +1504,7 @@ gst_validate_pad_monitor_query_func (GstPad * pad, GstObject * parent,
GstQuery * query)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
gboolean ret;
gst_validate_pad_monitor_query_overrides (pad_monitor, query);
@ -1533,7 +1539,7 @@ gst_validate_pad_monitor_activatemode_func (GstPad * pad, GstObject * parent,
GstPadMode mode, gboolean active)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
gboolean ret = TRUE;
/* TODO add overrides for activate func */
@ -1554,7 +1560,7 @@ gst_validate_pad_get_range_func (GstPad * pad, GstObject * parent,
guint64 offset, guint size, GstBuffer ** buffer)
{
GstValidatePadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
g_object_get_data ((GObject *) pad, "validate-monitor");
gboolean ret;
ret = pad_monitor->getrange_func (pad, parent, offset, size, buffer);
return ret;
@ -1811,12 +1817,13 @@ gst_validate_pad_monitor_do_setup (GstValidateMonitor * monitor)
pad = GST_VALIDATE_PAD_MONITOR_GET_PAD (pad_monitor);
if (g_object_get_data ((GObject *) pad, "qa-monitor")) {
GST_WARNING_OBJECT (pad_monitor, "Pad already has a qa-monitor associated");
if (g_object_get_data ((GObject *) pad, "validate-monitor")) {
GST_WARNING_OBJECT (pad_monitor,
"Pad already has a validate-monitor associated");
return FALSE;
}
g_object_set_data ((GObject *) pad, "qa-monitor", pad_monitor);
g_object_set_data ((GObject *) pad, "validate-monitor", pad_monitor);
pad_monitor->pad = pad;

View file

@ -43,7 +43,7 @@ static void
gst_validate_reporter_default_init (GstValidateReporterInterface * iface)
{
g_object_interface_install_property (iface,
g_param_spec_object ("qa-runner", "VALIDATE Runner",
g_param_spec_object ("validate-runner", "Validate Runner",
"The Validate runner to " "report errors to",
GST_TYPE_VALIDATE_RUNNER,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));

View file

@ -37,7 +37,7 @@
(G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_VALIDATE_SCENARIO, GstValidateScenarioPrivate))
#define GST_VALIDATE_SCENARIO_SUFFIX ".scenario"
#define GST_VALIDATE_SCENARIO_DIRECTORY "qa-scenario"
#define GST_VALIDATE_SCENARIO_DIRECTORY "validate-scenario"
#define DEFAULT_SEEK_TOLERANCE (0.1 * GST_SECOND) /* tolerance seek interval
TODO make it overridable */
@ -725,7 +725,7 @@ gst_validate_scenario_class_init (GstValidateScenarioClass * klass)
object_class->set_property = gst_validate_scenario_set_property;
g_object_class_install_property (object_class, PROP_RUNNER,
g_param_spec_object ("qa-runner", "VALIDATE Runner",
g_param_spec_object ("validate-runner", "VALIDATE Runner",
"The Validate runner to " "report errors to",
GST_TYPE_VALIDATE_RUNNER,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
@ -769,7 +769,7 @@ gst_validate_scenario_factory_create (GstValidateRunner * runner,
{
GstBus *bus;
GstValidateScenario *scenario =
g_object_new (GST_TYPE_VALIDATE_SCENARIO, "qa-runner",
g_object_new (GST_TYPE_VALIDATE_SCENARIO, "validate-runner",
runner, NULL);
GST_LOG ("Creating scenario %s", scenario_name);