libcamera/test
Umang Jain e35cae0679 test: camera: Camera reconfiguration and fd-leak test
Development and usage of isolated IPA's has identified bugs in the
transmission of the file descriptors between the pipeline handler and
the IPA through.

Add tests to identify these bugs and prevent regressions.

This tests basically checks for two things:
- Camera reconfigurations without stopping CameraManager
- Fd leaks across IPA IPC boundary [1]

Currently, it uses vimc, but can be easily changed to using another
platform (for e.g. IPU3) by changing kCamId_ and kIpaProxyName_.

The test performs kNumOfReconfigures_ (currently set to 10)
reconfigurations of the camera. Each reconfiguration runs
start(), capture(100ms), stop() of the camera. Hence, the test
runs approximately for 1 second.

For checking the fd leaks, the test monitors the /proc/$PROXY_PID/fd
directory for open fds. It compares the number of open fds after each
run to the number of open fds before the first run. If those two are
found to be mis-matched, the test shall report failure.

The test validates IPA IPC code paths which are used when the IPA is run
in isolated mode. The CameraTest is constructed with the isolate flag
set to enforce this.

[1] https://bugs.libcamera.org/show_bug.cgi?id=63

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-08-19 13:16:15 +05:30
..
camera test: camera: Camera reconfiguration and fd-leak test 2021-08-19 13:16:15 +05:30
controls controls: Add boolean constructors for ControlInfo 2021-08-02 18:07:16 +09:00
gstreamer test: gstreamer: Add test for gstreamer single stream 2021-08-14 22:58:46 +03:00
ipa libcamera/base: Validate internal headers as private 2021-06-25 16:11:11 +01:00
ipc libcamera/base: Validate internal headers as private 2021-06-25 16:11:11 +01:00
libtest libtest: camera_test: Plumb constructor to set LIBCAMERA_IPA_FORCE_ISOLATION 2021-08-19 12:54:03 +05:30
log libcamera/base: Validate internal headers as private 2021-06-25 16:11:11 +01:00
media_device libcamera: Rename 'method' to 'function' 2021-08-09 15:40:32 +03:00
pipeline libcamera/base: Validate internal headers as private 2021-06-25 16:11:11 +01:00
process libcamera/base: Validate internal headers as private 2021-06-25 16:11:11 +01:00
serialization test: control serialization: Test lookup by ControlId 2021-08-12 10:07:09 +02:00
stream libcamera: rename public libcamera dependency 2021-06-25 16:11:11 +01:00
v4l2_compat tests: v4l2_compat: Fix v4l2-compliance and v4l2-ctl version parsing 2020-07-17 18:50:10 +09:00
v4l2_subdevice libcamera: buffer: Rename buffer.h to framebuffer.h 2021-07-11 17:42:02 +03:00
v4l2_videodevice libcamera: buffer: Rename buffer.h to framebuffer.h 2021-07-11 17:42:02 +03:00
bayer-format.cpp test: bayer-format: Rectify internal header's #include path 2021-05-05 10:32:33 +02:00
byte-stream-buffer.cpp test: byte-stream-buffer: Initialize data array 2021-05-26 10:24:15 +02:00
camera-sensor.cpp libcamera/base: Move utils to the base library 2021-06-25 16:11:02 +01:00
delayed_controls.cpp test: delayed_controls: Rename delayed_contols.cpp to delayed_controls.cpp 2021-03-12 14:20:51 +00:00
event-dispatcher.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
event-thread.cpp libcamera/base: Move event_notifier to base 2021-06-25 16:11:10 +01:00
event.cpp libcamera/base: Move event_notifier to base 2021-06-25 16:11:10 +01:00
file-descriptor.cpp libcamera/base: Move utils to the base library 2021-06-25 16:11:02 +01:00
file.cpp libcamera: file: Turn MapFlag and OpenModeFlag into enum class 2021-08-03 10:55:33 +03:00
flags.cpp test: Add tests for the Flags class 2021-08-03 10:55:21 +03:00
geometry.cpp test: geometry: Add unit tests for new geometry helper functions 2020-10-27 14:06:51 +02:00
hotplug-cameras.cpp libcamera/base: Move File to base library 2021-06-25 16:11:10 +01:00
mapped-buffer.cpp libcamera: MappedFrameBuffer: Use typed Flags<MapModes> 2021-08-10 10:57:04 +01:00
meson.build test: gstreamer: Add test for gstreamer single stream 2021-08-14 22:58:46 +03:00
message.cpp test: message: Test recursive Thread::dispatchMessages() calls 2021-07-11 17:41:59 +03:00
object-delete.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
object-invoke.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
object.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
pixel-format.cpp libcamera/base: Move utils to the base library 2021-06-25 16:11:02 +01:00
public-api.cpp test: Ensure LIBCAMERA_BASE_PRIVATE isn't public 2021-06-25 16:11:11 +01:00
signal-threads.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
signal.cpp libcamera: Rename 'method' to 'function' 2021-08-09 15:40:32 +03:00
span.cpp libcamera/base: Move span to base library 2021-06-25 16:11:11 +01:00
threads.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
timer-thread.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
timer.cpp libcamera/base: Move extended base functionality 2021-06-25 16:11:08 +01:00
utils.cpp libcamera/base: Move span to base library 2021-06-25 16:11:11 +01:00