aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil-cisco@xs4all.nl>2018-11-28 11:44:54 +0100
committerHans Verkuil <hverkuil-cisco@xs4all.nl>2018-11-28 11:44:54 +0100
commitf2af3d3e99fb1a7ec215b4b47659e6e19783494b (patch)
tree8e8db6d234b32f8abf76586fecf3e44c9a10350a
parentd5b2a43fcfa2d07b12d7e365dfd4a95a53c1589c (diff)
v4l2-compliance: use inject_error and improve MEDIA_REQUEST_IOC_QUEUE tests
The error injection test for MEDIA_REQUEST_IOC_QUEUE failed for already prepared buffers since in that case it won't call buf_prepare again and vivid cannot inject the error there. So skip that test for every other buffer (all even buffers are prepared, all odd buffers aren't). Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
-rw-r--r--utils/v4l2-compliance/v4l2-test-buffers.cpp32
1 files changed, 9 insertions, 23 deletions
diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp b/utils/v4l2-compliance/v4l2-test-buffers.cpp
index bee8569b..592aae4a 100644
--- a/utils/v4l2-compliance/v4l2-test-buffers.cpp
+++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp
@@ -1160,13 +1160,8 @@ int testMmap(struct node *node, unsigned frame_count)
fail_on_test(setupMmap(node, q));
- if (is_vivid) {
- v4l2_control ctrl = {
- .id = VIVID_CID_START_STR_ERROR,
- };
- if (!node->s_ctrl(ctrl))
- fail_on_test(!node->streamon(q.g_type()));
- }
+ if (node->inject_error(VIVID_CID_START_STR_ERROR))
+ fail_on_test(!node->streamon(q.g_type()));
fail_on_test(node->streamon(q.g_type()));
fail_on_test(node->streamon(q.g_type()));
@@ -1617,6 +1612,8 @@ int testRequests(struct node *node, bool test_streaming)
if (!(i & 1)) {
fail_on_test(buf.prepare_buf(node) != EINVAL);
buf.s_flags(0);
+ if (node->inject_error(VIVID_CID_BUF_PREPARE_ERROR))
+ fail_on_test(buf.prepare_buf(node) != EINVAL);
fail_on_test(buf.prepare_buf(node));
fail_on_test(buf.querybuf(node, i));
fail_on_test(!(buf.g_flags() & V4L2_BUF_FLAG_PREPARED));
@@ -1660,15 +1657,9 @@ int testRequests(struct node *node, bool test_streaming)
fail_on_test(buf.querybuf(node, i));
fail_on_test(!(buf.g_flags() & V4L2_BUF_FLAG_IN_REQUEST));
fail_on_test(!(buf.g_flags() & V4L2_BUF_FLAG_REQUEST_FD));
- if (is_vivid && i > num_bufs - 2) {
- v4l2_control ctrl = {
- .id = VIVID_CID_BUF_PREPARE_ERROR,
- };
-
- if (!node->s_ctrl(ctrl))
- fail_on_test(doioctl_fd(buf_req_fds[i],
- MEDIA_REQUEST_IOC_QUEUE, 0) != EINVAL);
- }
+ if ((i & 1) && node->inject_error(VIVID_CID_BUF_PREPARE_ERROR))
+ fail_on_test(doioctl_fd(buf_req_fds[i],
+ MEDIA_REQUEST_IOC_QUEUE, 0) != EINVAL);
fail_on_test(doioctl_fd(buf_req_fds[i], MEDIA_REQUEST_IOC_QUEUE, 0));
fail_on_test(buf.querybuf(node, i));
fail_on_test(buf.g_flags() & V4L2_BUF_FLAG_IN_REQUEST);
@@ -1681,13 +1672,8 @@ int testRequests(struct node *node, bool test_streaming)
buf_req_fds[i] = -1;
}
if (i == num_bufs / 2) {
- if (is_vivid) {
- v4l2_control ctrl = {
- .id = VIVID_CID_START_STR_ERROR,
- };
- if (!node->s_ctrl(ctrl))
- fail_on_test(!node->streamon(q.g_type()));
- }
+ if (node->inject_error(VIVID_CID_START_STR_ERROR))
+ fail_on_test(!node->streamon(q.g_type()));
fail_on_test(node->streamon(q.g_type()));
}
}

Privacy Policy