test: gstreamer: Check availability of cameras before running

Move the logic for checking the availability of cameras from
multi_stream_test to gstreamer test base class. Since
single_stream_class always assumes that a camera is available on the
system (which is not always the case for e.g. RPi in CI/CD environments)
it makes sense to have the availability check in the base class.
If no cameras are available, the behaviour should be to skip instead
of a failure.

We currently have 2 tests for gstreamer differing based on number
of streams supported by the camera. Hence, the camera availability
is checked in conjunction with the number of the streams required by
the derived class.

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Umang Jain 2022-07-21 19:15:31 +05:30
parent 1b80d9e997
commit 5646849b59
3 changed files with 37 additions and 21 deletions

View file

@ -5,6 +5,8 @@
* libcamera Gstreamer element API tests
*/
#include <libcamera/libcamera.h>
#include <libcamera/base/utils.h>
#include "gstreamer_test.h"
@ -25,7 +27,7 @@ const char *__asan_default_options()
}
}
GstreamerTest::GstreamerTest()
GstreamerTest::GstreamerTest(unsigned int numStreams)
: pipeline_(nullptr), libcameraSrc_(nullptr)
{
/*
@ -67,9 +69,38 @@ GstreamerTest::GstreamerTest()
return;
}
/*
* Atleast one camera should be available with numStreams streams,
* otherwise skip the test entirely.
*/
if (!checkMinCameraStreams(numStreams)) {
status_ = TestSkip;
return;
}
status_ = TestPass;
}
bool GstreamerTest::checkMinCameraStreams(unsigned int numStreams)
{
libcamera::CameraManager cm;
bool cameraFound = false;
cm.start();
for (auto &camera : cm.cameras()) {
if (camera->streams().size() < numStreams)
continue;
cameraFound = true;
break;
}
cm.stop();
return cameraFound;
}
GstreamerTest::~GstreamerTest()
{
g_clear_object(&pipeline_);