1 /* 2 * v4l-test: Test environment for Video For Linux Two API 3 * 4 * 16 Jul 2009 0.24 Test cases added for VIDIOC_G_JPEGCOMP and VIDIOC_ENUM_FRAMESIZES 5 * 23 May 2009 0.23 Test cases added for VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS 6 * 5 May 2009 0.22 Test cases added for VIDIOC_QUERYBUF 7 * 29 Apr 2009 0.21 Test cases added for VIDIOC_REQBUFS 8 * 18 Apr 2009 0.20 NULL parameter test suite split to read only, write only 9 * and write/read ioctl suite 10 * 16 Apr 2009 0.19 Test cases added for VIDIOC_S_FMT 11 * 5 Apr 2009 0.18 Test cases for VIDIOC_QUERYMENU added 12 * 4 Apr 2009 0.17 Test cases for VIDIOC_G_FMT added 13 * 29 Mar 2009 0.16 Test case for VIDIOC_S_FREQUENCY with NULL parameter added 14 * 22 Mar 2009 0.15 Test cases added for VIDIOC_G_OUTPUT and VIDIOC_S_OUTPUT 15 * 18 Mar 2009 0.14 Test cases added for VIDIOC_G_PARM 16 * 7 Mar 2009 0.13 Test cases added for VIDIOC_S_CROP 17 * 22 Feb 2009 0.12 Test cases added for VIDIOC_S_CTRL 18 * 19 Feb 2009 0.11 Test cases added for VIDIOC_G_CTRL 19 * 7 Feb 2009 0.10 Test cases added for VIDIOC_G_AUDIO, VIDIOC_G_AUDOUT, 20 * VIDIOC_S_AUDIO and VIDIOC_G_CROP 21 * 3 Feb 2009 0.9 Test cases for VIDIOC_G_AUDIO and VIDIOC_G_AUDOUT added 22 * 2 Feb 2009 0.8 Test cases for VIDIOC_G_MODULATOR, VIDIOC_G_PRIORITY 23 * and VIDIOC_S_PRIORITY added 24 * 1 Feb 2009 0.7 Test cases for VIDIOC_S_FREQUENCY added 25 * 31 Jan 2009 0.6 Test cases for VIDIOC_G_TUNER added 26 * 18 Jan 2009 0.5 Test cases for MAX_EM28XX_INPUT and MAX_EM28XX_TVNORMS 27 * removed 28 * 1 Jan 2009 0.4 Test cases for VIDIOC_ENUMOUTPUT, VIDIOC_ENUMAUDOUT, 29 * VIDIOC_QUERYCTRL added; 30 * New test cases for VIDIOC_ENUMAUDIO, VIDIOC_ENUM_FMT, 31 * VIDIOC_ENUM_STD 32 * 23 Dec 2008 0.3 Test cases for VIDIOC_LOG_STATUS added 33 * 22 Dec 2008 0.2 Test cases with NULL parameter added; 34 * Test cases for VIDIOC_CROPCAP added 35 * 18 Dec 2008 0.1 First release 36 * 37 * Written by Mrton Nmeth <nm127 (at) freemail.hu> 38 * Released under GPL 39 */ 40 41 #include <stdio.h> 42 #include <sys/types.h> 43 #include <sys/stat.h> 44 #include <fcntl.h> 45 #include <unistd.h> 46 #include <sys/ioctl.h> 47 #include <errno.h> 48 #include <string.h> 49 50 #include <linux/videodev2.h> 51 #include <linux/errno.h> 52 53 #include <CUnit/CUnit.h> 54 #include <CUnit/Basic.h> 55 56 #include "v4l2_test.h" 57 #include "dev_video.h" 58 #include "video_limits.h" 59 60 #include "test_VIDIOC_QUERYCAP.h" 61 #include "test_VIDIOC_QUERYSTD.h" 62 #include "test_VIDIOC_QUERYCTRL.h" 63 #include "test_VIDIOC_QUERYMENU.h" 64 #include "test_VIDIOC_CROPCAP.h" 65 #include "test_VIDIOC_G_SLICED_VBI_CAP.h" 66 67 #include "test_VIDIOC_ENUMAUDIO.h" 68 #include "test_VIDIOC_ENUMAUDOUT.h" 69 #include "test_VIDIOC_ENUMSTD.h" 70 #include "test_VIDIOC_ENUM_FMT.h" 71 #include "test_VIDIOC_ENUMINPUT.h" 72 #include "test_VIDIOC_ENUMOUTPUT.h" 73 #include "test_VIDIOC_ENUM_FRAMESIZES.h" 74 75 #include "test_VIDIOC_STD.h" 76 #include "test_VIDIOC_INPUT.h" 77 #include "test_VIDIOC_OUTPUT.h" 78 #include "test_VIDIOC_TUNER.h" 79 #include "test_VIDIOC_MODULATOR.h" 80 #include "test_VIDIOC_FREQUENCY.h" 81 #include "test_VIDIOC_PRIORITY.h" 82 #include "test_VIDIOC_AUDIO.h" 83 #include "test_VIDIOC_AUDOUT.h" 84 #include "test_VIDIOC_CROP.h" 85 #include "test_VIDIOC_CTRL.h" 86 #include "test_VIDIOC_EXT_CTRLS.h" 87 #include "test_VIDIOC_PARM.h" 88 #include "test_VIDIOC_FMT.h" 89 #include "test_VIDIOC_JPEGCOMP.h" 90 91 #include "test_VIDIOC_REQBUFS.h" 92 #include "test_VIDIOC_QUERYBUF.h" 93 94 #include "test_VIDIOC_LOG_STATUS.h" 95 #include "test_invalid_ioctl.h" 96 97 static CU_TestInfo suite_querycap[] = { 98 {"VIDIOC_QUERYCAP", test_VIDIOC_QUERYCAP}, 99 100 {"VIDIOC_CROPCAP", test_VIDIOC_CROPCAP}, 101 {"VIDIOC_CROPCAP with different inputs", 102 test_VIDIOC_CROPCAP_enum_INPUT}, 103 104 {"VIDIOC_G_SLICED_VBI_CAP", test_VIDIOC_G_SLICED_VBI_CAP}, 105 {"VIDIOC_G_SLICED_VBI_CAP with invalid types", 106 test_VIDIOC_G_SLICED_VBI_CAP_invalid}, 107 108 CU_TEST_INFO_NULL, 109 }; 110 111 static CU_TestInfo suite_enums[] = { 112 {"VIDIOC_ENUMAUDIO", test_VIDIOC_ENUMAUDIO}, 113 {"VIDIOC_ENUMAUDIO, index=S32_MAX", test_VIDIOC_ENUMAUDIO_S32_MAX}, 114 {"VIDIOC_ENUMAUDIO, index=S32_MAX+1", test_VIDIOC_ENUMAUDIO_S32_MAX_1}, 115 {"VIDIOC_ENUMAUDIO, index=U32_MAX", test_VIDIOC_ENUMAUDIO_U32_MAX}, 116 117 {"VIDIOC_ENUMAUDOUT", test_VIDIOC_ENUMAUDOUT}, 118 {"VIDIOC_ENUMAUDOUT, index=S32_MAX", test_VIDIOC_ENUMAUDOUT_S32_MAX}, 119 {"VIDIOC_ENUMAUDOUT, index=S32_MAX+1", 120 test_VIDIOC_ENUMAUDOUT_S32_MAX_1}, 121 {"VIDIOC_ENUMAUDOUT, index=U32_MAX", test_VIDIOC_ENUMAUDOUT_U32_MAX}, 122 123 {"VIDIOC_ENUM_FMT", test_VIDIOC_ENUM_FMT}, 124 {"VIDIOC_ENUM_FMT, index=S32_MAX", test_VIDIOC_ENUM_FMT_S32_MAX}, 125 {"VIDIOC_ENUM_FMT, index=S32_MAX+1", test_VIDIOC_ENUM_FMT_S32_MAX_1}, 126 {"VIDIOC_ENUM_FMT, index=U32_MAX", test_VIDIOC_ENUM_FMT_U32_MAX}, 127 {"VIDIOC_ENUM_FMT, invalid type", test_VIDIOC_ENUM_FMT_invalid_type}, 128 129 {"VIDIOC_ENUMINPUT", test_VIDIOC_ENUMINPUT}, 130 {"VIDIOC_ENUMINPUT, index=S32_MAX", test_VIDIOC_ENUMINPUT_S32_MAX}, 131 {"VIDIOC_ENUMINPUT, index=S32_MAX+1", test_VIDIOC_ENUMINPUT_S32_MAX_1}, 132 {"VIDIOC_ENUMINPUT, index=U32_MAX", test_VIDIOC_ENUMINPUT_U32_MAX}, 133 134 {"VIDIOC_ENUMOUTPUT", test_VIDIOC_ENUMOUTPUT}, 135 {"VIDIOC_ENUMOUTPUT, index=S32_MAX", test_VIDIOC_ENUMOUTPUT_S32_MAX}, 136 {"VIDIOC_ENUMOUTPUT, index=S32_MAX+1", 137 test_VIDIOC_ENUMOUTPUT_S32_MAX_1}, 138 {"VIDIOC_ENUMOUTPUT, index=U32_MAX", test_VIDIOC_ENUMOUTPUT_U32_MAX}, 139 140 {"VIDIOC_ENUMSTD", test_VIDIOC_ENUMSTD}, 141 {"VIDIOC_ENUMSTD, index=S32_MAX", test_VIDIOC_ENUMSTD_S32_MAX}, 142 {"VIDIOC_ENUMSTD, index=S32_MAX+1", test_VIDIOC_ENUMSTD_S32_MAX_1}, 143 {"VIDIOC_ENUMSTD, index=U32_MAX", test_VIDIOC_ENUMSTD_U32_MAX}, 144 145 {"VIDIOC_QUERYCTRL", test_VIDIOC_QUERYCTRL}, 146 {"VIDIOC_QUERYCTRL, id=V4L2_CID_BASE-1", test_VIDIOC_QUERYCTRL_BASE_1}, 147 {"VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1", test_VIDIOC_QUERYCTRL_LASTP1}, 148 {"VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1+1", 149 test_VIDIOC_QUERYCTRL_LASTP1_1}, 150 {"VIDIOC_QUERYCTRL with V4L2_CTRL_FLAG_NEXT_CTRL", 151 test_VIDIOC_QUERYCTRL_flag_NEXT_CTRL}, 152 {"VIDIOC_QUERYCTRL, enumerate private controls", 153 test_VIDIOC_QUERYCTRL_private}, 154 {"VIDIOC_QUERYCTRL, V4L2_CID_PRIVATE_BASE-1", 155 test_VIDIOC_QUERYCTRL_private_base_1}, 156 {"VIDIOC_QUERYCTRL, last private control+1", 157 test_VIDIOC_QUERYCTRL_private_last_1}, 158 159 {"VIDIOC_QUERYMENU", test_VIDIOC_QUERYMENU}, 160 {"VIDIOC_QUERYMENU with invalid id", test_VIDIOC_QUERYMENU_invalid}, 161 {"VIDIOC_QUERYMENU with private controls", 162 test_VIDIOC_QUERYMENU_private}, 163 {"VIDIOC_QUERYMENU, last private control+1", 164 test_VIDIOC_QUERYMENU_private_last_1}, 165 166 {"VIDIOC_ENUM_FRAMESIZES", test_VIDIOC_ENUM_FRAMESIZES}, 167 {"VIDIOC_ENUM_FRAMESIZES with invalid index", 168 test_VIDIOC_ENUM_FRAMESIZES_invalid_index}, 169 {"VIDIOC_ENUM_FRAMESIZES with invalid pixel_format", 170 test_VIDIOC_ENUM_FRAMESIZES_invalid_pixel_format}, 171 172 CU_TEST_INFO_NULL, 173 }; 174 175 static CU_TestInfo suite_get_set_try[] = { 176 {"VIDIOC_G_STD", test_VIDIOC_G_STD}, 177 {"VIDIOC_S_STD with the enumerated values", 178 test_VIDIOC_S_STD_from_enum}, 179 {"VIDIOC_S_STD", test_VIDIOC_S_STD}, 180 {"VIDIOC_S_STD with invalid standard", 181 test_VIDIOC_S_STD_invalid_standard}, 182 183 {"VIDIOC_G_INPUT", test_VIDIOC_G_INPUT}, 184 {"VIDIOC_S_INPUT from enum", test_VIDIOC_S_INPUT_from_enum}, 185 {"VIDIOC_S_INPUT with invalid inputs", 186 test_VIDIOC_S_INPUT_invalid_inputs}, 187 188 {"VIDIOC_G_OUTPUT", test_VIDIOC_G_OUTPUT}, 189 {"VIDIOC_S_OUTPUT from enum", test_VIDIOC_S_OUTPUT_from_enum}, 190 {"VIDIOC_S_OUTPUT with invalid outputs", 191 test_VIDIOC_S_OUTPUT_invalid_outputs}, 192 193 {"VIDIOC_G_TUNER", test_VIDIOC_G_TUNER}, 194 {"VIDIOC_G_TUNER, index=S32_MAX", test_VIDIOC_G_TUNER_S32_MAX}, 195 {"VIDIOC_G_TUNER, index=S32_MAX+1", test_VIDIOC_G_TUNER_S32_MAX_1}, 196 {"VIDIOC_G_TUNER, index=U32_MAX", test_VIDIOC_G_TUNER_U32_MAX}, 197 198 {"VIDIOC_S_TUNER", test_VIDIOC_S_TUNER}, 199 {"VIDIOC_S_TUNER with invalid index and audmode parameters", 200 test_VIDIOC_S_TUNER_invalid}, 201 202 {"VIDIOC_G_MODULATOR", test_VIDIOC_G_MODULATOR}, 203 {"VIDIOC_G_MODULATOR, index=S32_MAX", test_VIDIOC_G_MODULATOR_S32_MAX}, 204 {"VIDIOC_G_MODULATOR, index=S32_MAX+1", 205 test_VIDIOC_G_MODULATOR_S32_MAX_1}, 206 {"VIDIOC_G_MODULATOR, index=U32_MAX", test_VIDIOC_G_MODULATOR_U32_MAX}, 207 208 {"VIDIOC_G_FREQUENCY", test_VIDIOC_G_FREQUENCY}, 209 {"VIDIOC_G_FREQUENCY, tuner=S32_MAX", test_VIDIOC_G_FREQUENCY_S32_MAX}, 210 {"VIDIOC_G_FREQUENCY, tuner=S32_MAX+1", 211 test_VIDIOC_G_FREQUENCY_S32_MAX_1}, 212 {"VIDIOC_G_FREQUENCY, tuner=U32_MAX", test_VIDIOC_G_FREQUENCY_U32_MAX}, 213 214 {"VIDIOC_S_FREQUENCY", test_VIDIOC_S_FREQUENCY}, 215 {"VIDIOC_S_FREQUENCY with boundary values", 216 test_VIDIOC_S_FREQUENCY_boundaries}, 217 {"VIDIOC_S_FREQUENCY scan all possbile values", 218 test_VIDIOC_S_FREQUENCY_scan}, 219 220 {"VIDIOC_G_PRIORITY", test_VIDIOC_G_PRIORITY}, 221 {"VIDIOC_S_PRIORITY", test_VIDIOC_S_PRIORITY}, 222 {"VIDIOC_S_PRIORITY with invalid values", 223 test_VIDIOC_S_PRIORITY_invalid}, 224 225 {"VIDIOC_G_AUDIO", test_VIDIOC_G_AUDIO}, 226 {"VIDIOC_G_AUDIO, ignore index value", 227 test_VIDIOC_G_AUDIO_ignore_index}, 228 229 {"VIDIOC_S_AUDIO", test_VIDIOC_S_AUDIO}, 230 {"VIDIOC_S_AUDIO, index=S32_MAX", test_VIDIOC_S_AUDIO_S32_MAX}, 231 {"VIDIOC_S_AUDIO, index=S32_MAX+1", test_VIDIOC_S_AUDIO_S32_MAX_1}, 232 {"VIDIOC_S_AUDIO, index=U32_MAX", test_VIDIOC_S_AUDIO_U32_MAX}, 233 234 {"VIDIOC_G_AUDOUT", test_VIDIOC_G_AUDOUT}, 235 {"VIDIOC_G_AUDOUT, ignore index value", 236 test_VIDIOC_G_AUDOUT_ignore_index}, 237 238 {"VIDIOC_S_AUDOUT", test_VIDIOC_S_AUDOUT}, 239 {"VIDIOC_S_AUDOUT, index=S32_MAX", test_VIDIOC_S_AUDOUT_S32_MAX}, 240 {"VIDIOC_S_AUDOUT, index=S32_MAX+1", test_VIDIOC_S_AUDOUT_S32_MAX_1}, 241 {"VIDIOC_S_AUDOUT, index=U32_MAX", test_VIDIOC_S_AUDOUT_U32_MAX}, 242 243 {"VIDIOC_G_CROP", test_VIDIOC_G_CROP}, 244 {"VIDIOC_G_CROP with invalid type", test_VIDIOC_G_CROP_invalid}, 245 {"VIDIOC_S_CROP", test_VIDIOC_S_CROP}, 246 {"VIDIOC_S_CROP with invalid type", test_VIDIOC_S_CROP_invalid}, 247 248 {"VIDIOC_G_CTRL", test_VIDIOC_G_CTRL}, 249 250 {"VIDIOC_S_CTRL", test_VIDIOC_S_CTRL}, 251 {"VIDIOC_S_CTRL with invalid value parameter", 252 test_VIDIOC_S_CTRL_invalid}, 253 {"VIDIOC_S_CTRL, withe balance", test_VIDIOC_S_CTRL_white_balance}, 254 {"VIDIOC_S_CTRL, white balance with invalid value parameter", 255 test_VIDIOC_S_CTRL_white_balance_invalid}, 256 {"VIDIOC_S_CTRL, gain control", test_VIDIOC_S_CTRL_gain}, 257 {"VIDIOC_S_CTRL, gain control with invalid value parameter", 258 test_VIDIOC_S_CTRL_gain_invalid}, 259 260 {"VIDIOC_G_EXT_CTRLS with zero items to get", 261 test_VIDIOC_G_EXT_CTRLS_zero}, 262 {"VIDIOC_G_EXT_CTRLS with zero items to get, but with invalid count values", 263 test_VIDIOC_G_EXT_CTRLS_zero_invalid_count}, 264 {"VIDIOC_G_EXT_CTRLS with only one item to get", 265 test_VIDIOC_G_EXT_CTRLS_one}, 266 267 {"VIDIOC_S_EXT_CTRLS with zero items to set", 268 test_VIDIOC_S_EXT_CTRLS_zero}, 269 {"VIDIOC_S_EXT_CTRLS with zero items to set, but with invalid count values", 270 test_VIDIOC_S_EXT_CTRLS_zero_invalid_count}, 271 272 {"VIDIOC_TRY_EXT_CTRLS with zero items to try", 273 test_VIDIOC_TRY_EXT_CTRLS_zero}, 274 {"VIDIOC_TRY_EXT_CTRLS with zero items to try, but with invalid count values", 275 test_VIDIOC_TRY_EXT_CTRLS_zero_invalid_count}, 276 277 {"VIDIOC_G_PARM", test_VIDIOC_G_PARM}, 278 {"VIDIOC_G_PARM with invalid type parameter", 279 test_VIDIOC_G_PARM_invalid}, 280 281 {"VIDIOC_G_FMT", test_VIDIOC_G_FMT}, 282 {"VIDIOC_G_FMT with invalid type parameter", 283 test_VIDIOC_G_FMT_invalid_type}, 284 285 {"VIDIOC_S_FMT with enumerated values", test_VIDIOC_S_FMT_enum}, 286 {"VIDIOC_S_FMT with invalid type parameter", test_VIDIOC_S_FMT_type}, 287 288 {"VIDIOC_G_JPEGCOMP", test_VIDIOC_G_JPEGCOMP}, 289 290 CU_TEST_INFO_NULL, 291 }; 292 293 static CU_TestInfo suite_querystd[] = { 294 {"VIDIOC_QUERYSTD", test_VIDIOC_QUERYSTD}, 295 296 CU_TEST_INFO_NULL, 297 }; 298 299 static CU_TestInfo suite_buffs[] = { 300 {"VIDIOC_REQBUFS with memory map capture streaming i/o", 301 test_VIDIOC_REQBUFS_capture_mmap}, 302 {"VIDIOC_REQBUFS with user pointer capture streaming i/o", 303 test_VIDIOC_REQBUFS_capture_userptr}, 304 {"VIDIOC_REQBUFS with memory map output streaming i/o", 305 test_VIDIOC_REQBUFS_output_mmap}, 306 {"VIDIOC_REQBUFS with user pointer output streaming i/o", 307 test_VIDIOC_REQBUFS_output_userptr}, 308 {"VIDIOC_REQBUFS with invalid memory parameter, capture", 309 test_VIDIOC_REQBUFS_invalid_memory_capture}, 310 {"VIDIOC_REQBUFS with invalid memory parameter, output", 311 test_VIDIOC_REQBUFS_invalid_memory_output}, 312 {"VIDIOC_REQBUFS with invalid type parameter, memory mapped i/o", 313 test_VIDIOC_REQUBUFS_invalid_type_mmap}, 314 {"VIDIOC_REQBUFS with invalid type parameter, user pointer i/o", 315 test_VIDIOC_REQUBUFS_invalid_type_userptr}, 316 317 {"VIDIOC_QUERYBUF with memory map capture streaming i/o", 318 test_VIDIOC_QUERYBUF_capture_mmap}, 319 {"VIDIOC_QUERYBUF with user pointer capture streaming i/o", 320 test_VIDIOC_QUERYBUF_capture_userptr}, 321 {"VIDIOC_QUERYBUF with memory map output streaming i/o", 322 test_VIDIOC_QUERYBUF_output_mmap}, 323 {"VIDIOC_QUERYBUF with user pointer output streaming i/o", 324 test_VIDIOC_QUERYBUF_output_userptr}, 325 {"VIDIOC_QUERYBUF with overlay capture (invalid)", 326 test_VIDIOC_QUERYBUF_overlay_capture}, 327 {"VIDIOC_QUERYBUF with overlay output (invalid)", 328 test_VIDIOC_QUERYBUF_overlay_output}, 329 {"VIDIOC_QUERYBUF with invalid memory parameter, capture", 330 test_VIDIOC_QUERYBUF_invalid_memory_capture}, 331 {"VIDIOC_QUERYBUF with invalid memory parameter, output", 332 test_VIDIOC_QUERYBUF_invalid_memory_output}, 333 {"VIDIOC_QUERYBUF with invalid type parameter, memory mapped i/o", 334 test_VIDIOC_QUERYBUF_invalid_type_mmap}, 335 {"VIDIOC_QUERYBUF with invalid type parameter, user pointer i/o", 336 test_VIDIOC_QUERYBUF_invalid_type_userptr}, 337 338 CU_TEST_INFO_NULL, 339 }; 340 341 static CU_TestInfo suite_null_readonly[] = { 342 {"VIDIOC_QUERYCAP with NULL parameter", test_VIDIOC_QUERYCAP_NULL}, 343 /* { "VIDIOC_G_FBUF with NULL parameter", }, */ 344 {"VIDIOC_G_STD with NULL parameter", test_VIDIOC_G_STD_NULL}, 345 {"VIDIOC_G_AUDIO with NULL parameter", test_VIDIOC_G_AUDIO_NULL}, 346 {"VIDIOC_G_INPUT with NULL parameter", test_VIDIOC_G_INPUT_NULL}, 347 {"VIDIOC_G_OUTPUT with NULL parameter", test_VIDIOC_G_OUTPUT_NULL}, 348 {"VIDIOC_G_AUDOUT with NULL parameter", test_VIDIOC_G_AUDOUT_NULL}, 349 {"VIDIOC_G_JPEGCOMP with NULL parameter", test_VIDIOC_G_JPEGCOMP_NULL}, 350 {"VIDIOC_QUERYSTD with NULL parameter", test_VIDIOC_QUERYSTD_NULL}, 351 {"VIDIOC_G_PRIORITY with NULL parameter", test_VIDIOC_G_PRIORITY_NULL}, 352 /* { "VIDIOC_G_ENC_INDEX with NULL parameter", }, */ 353 354 CU_TEST_INFO_NULL, 355 }; 356 357 static CU_TestInfo suite_null_writeonly[] = { 358 /* { "VIDIOC_S_FBUF with NULL parameter", }, */ 359 /* { "VIDIOC_OVERLAY with NULL parameter", }, */ 360 /* { "VIDIOC_STREAMON with NULL parameter", }, */ 361 /* { "VIDIOC_STREAMOFF with NULL parameter", }, */ 362 {"VIDIOC_S_STD with NULL parameter", test_VIDIOC_S_STD_NULL}, 363 {"VIDIOC_S_TUNER with NULL parameter", test_VIDIOC_S_TUNER_NULL}, 364 {"VIDIOC_S_AUDIO with NULL parameter", test_VIDIOC_S_AUDIO_NULL}, 365 {"VIDIOC_S_AUDOUT with NULL parameter", test_VIDIOC_S_AUDOUT_NULL}, 366 /* { "VIDIOC_S_MODULATOR with NULL parameter", }, */ 367 {"VIDIOC_S_FREQUENCY with NULL parameter", 368 test_VIDIOC_S_FREQUENCY_NULL}, 369 {"VIDIOC_S_CROP with NULL parameter", test_VIDIOC_S_CROP_NULL}, 370 /* { "VIDIOC_S_JPEGCOMP with NULL parameter", }, */ 371 {"VIDIOC_S_PRIORITY with NULL parameter", test_VIDIOC_S_PRIORITY_NULL}, 372 /* { "VIDIOC_DBG_S_REGISTER with NULL parameter", }, */ 373 /* { "VIDIOC_S_HW_FREQ_SEEK with NULL parameter", }, */ 374 375 CU_TEST_INFO_NULL, 376 }; 377 378 static CU_TestInfo suite_null_writeread[] = { 379 {"VIDIOC_ENUM_FMT with NULL parameter", test_VIDIOC_ENUM_FMT_NULL}, 380 {"VIDIOC_G_FMT with NULL parameter", test_VIDIOC_G_FMT_NULL}, 381 /* { "VIDIOC_S_FMT with NULL parameter", }, */ 382 /* { "VIDIOC_REQBUFS with NULL parameter", } */ 383 /* { "VIDIOC_QUERYBUF with NULL parameter", } */ 384 /* { "VIDIOC_QBUF with NULL parameter", }, */ 385 /* { "VIDIOC_DQBUF with NULL parameter", }, */ 386 {"VIDIOC_G_PARM with NULL parameter", test_VIDIOC_G_PARM_NULL}, 387 /* { "VIDIOC_S_PARM with NULL parameter", }, */ 388 {"VIDIOC_ENUMSTD with NULL parameter", test_VIDIOC_ENUMSTD_NULL}, 389 {"VIDIOC_ENUMINPUT with NULL parameter", test_VIDIOC_ENUMINPUT_NULL}, 390 {"VIDIOC_G_CTRL with NULL parameter", test_VIDIOC_G_CTRL_NULL}, 391 {"VIDIOC_S_CTRL with NULL parameter", test_VIDIOC_S_CTRL_NULL}, 392 {"VIDIOC_G_TUNER with NULL parameter", test_VIDIOC_G_TUNER_NULL}, 393 {"VIDIOC_QUERYCTRL with NULL parameter", test_VIDIOC_QUERYCTRL_NULL}, 394 {"VIDIOC_QUERYMENU with NULL parameter", test_VIDIOC_QUERYMENU_NULL}, 395 {"VIDIOC_S_INPUT with NULL parameter", test_VIDIOC_S_INPUT_NULL}, 396 {"VIDIOC_S_OUTPUT with NULL parameter", test_VIDIOC_S_OUTPUT_NULL}, 397 {"VIDIOC_ENUMOUTPUT with NULL parameter", test_VIDIOC_ENUMOUTPUT_NULL}, 398 {"VIDIOC_G_MODULATOR with NULL parameter", 399 test_VIDIOC_G_MODULATOR_NULL}, 400 {"VIDIOC_G_FREQUENCY with NULL parameter", 401 test_VIDIOC_G_FREQUENCY_NULL}, 402 {"VIDIOC_CROPCAP with NULL parameter", test_VIDIOC_CROPCAP_NULL}, 403 {"VIDIOC_G_CROP with NULL parameter", test_VIDIOC_G_CROP_NULL}, 404 /* { "VIDIOC_TRY_FMT with NULL parameter", }, */ 405 {"VIDIOC_ENUMAUDIO with NULL parameter", test_VIDIOC_ENUMAUDIO_NULL}, 406 {"VIDIOC_ENUMAUDOUT with NULL parameter", test_VIDIOC_ENUMAUDOUT_NULL}, 407 {"VIDIOC_G_SLICED_VBI_CAP with NULL parameter", 408 test_VIDIOC_G_SLICED_VBI_CAP_NULL}, 409 {"VIDIOC_G_EXT_CTRLS with NULL parameter", 410 test_VIDIOC_G_EXT_CTRLS_NULL}, 411 {"VIDIOC_S_EXT_CTRLS with NULL parameter", 412 test_VIDIOC_S_EXT_CTRLS_NULL}, 413 {"VIDIOC_TRY_EXT_CTRLS with NULL parameter", 414 test_VIDIOC_TRY_EXT_CTRLS_NULL}, 415 {"VIDIOC_ENUM_FRAMESIZES with NULL parameter", 416 test_VIDIOC_ENUM_FRAMESIZES_NULL}, 417 /* { "VIDIOC_ENUM_FRAMEINTERVALS with NULL parameter", }, */ 418 /* { "VIDIOC_ENCODER_CMD with NULL parameter", }, */ 419 /* { "VIDIOC_TRY_ENCODER_CMD with NULL parameter", }, */ 420 /* { "VIDIOC_DBG_G_REGISTER with NULL parameter", }, */ 421 /* { "VIDIOC_DBG_G_CHIP_IDENT with NULL parameter", }, */ 422 423 CU_TEST_INFO_NULL, 424 }; 425 426 static CU_TestInfo suite_invalid_ioctl[] = { 427 {"invalid ioctl _IO(0, 0)", test_invalid_ioctl_1}, 428 {"invalid ioctl _IO(0xFF, 0xFF)", test_invalid_ioctl_2}, 429 {"invalid v4l1 ioctl _IO('v', 0xFF)", test_invalid_ioctl_3}, 430 {"invalid v4l2 ioctl _IO('V', 0xFF)", test_invalid_ioctl_4}, 431 432 CU_TEST_INFO_NULL, 433 }; 434 435 static CU_TestInfo suite_debug_ioctl[] = { 436 {"test_VIDIOC_LOG_STATUS", test_VIDIOC_LOG_STATUS}, 437 438 CU_TEST_INFO_NULL, 439 }; 440 441 static CU_SuiteInfo suites[] = { 442 {"VIDIOC_QUERYCAP", open_video, close_video, suite_querycap}, 443 {"VIDIOC_ENUM* ioctl calls", open_video, close_video, suite_enums}, 444 {"VIDIOC_G_*, VIDIOC_S_* and VIDIOC_TRY_* ioctl calls", open_video, 445 close_video, suite_get_set_try}, 446 {"VIDIOC_QUERYSTD", open_video, close_video, suite_querystd}, 447 {"buffer i/o", open_video, close_video, suite_buffs}, 448 {"read only IOCTLs with NULL parameter", open_video, close_video, 449 suite_null_readonly}, 450 {"write only IOCTLs with NULL parameter", open_video, close_video, 451 suite_null_writeonly}, 452 {"write and read IOCTLs with NULL parameter", open_video, close_video, 453 suite_null_writeread}, 454 {"debug ioctl calls", open_video, close_video, suite_debug_ioctl}, 455 {"invalid ioctl calls", open_video, close_video, suite_invalid_ioctl}, 456 CU_SUITE_INFO_NULL, 457 }; 458 459 int main() 460 { 461 CU_ErrorCode err; 462 463 err = CU_initialize_registry(); 464 if (err != CUE_SUCCESS) { 465 printf("ERROR: cannot initialize CUNIT registry, giving up.\n"); 466 return 1; 467 } 468 469 err = CU_register_suites(suites); 470 if (err == CUE_SUCCESS) { 471 472 //CU_basic_set_mode(CU_BRM_NORMAL); 473 //CU_basic_set_mode(CU_BRM_SILENT); 474 CU_basic_set_mode(CU_BRM_VERBOSE); 475 err = CU_basic_run_tests(); 476 if (err != CUE_SUCCESS) { 477 printf("CU_basic_run_tests returned %i\n", err); 478 } 479 480 } else { 481 printf("ERROR: cannot add test suites\n"); 482 } 483 484 CU_cleanup_registry(); 485 486 tst_exit(); 487 } 488