1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the
9 * "Software"), to deal in the Software without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sub license, and/or sell copies of the Software, and to
12 * permit persons to whom the Software is furnished to do so, subject to
13 * the following conditions:
15 * The above copyright notice and this permission notice (including the
16 * next paragraph) shall be included in all copies or substantial portions
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 **************************************************************************/
29 #include "gtest/gtest.h"
31 #include "tbm_stubs.h"
32 #include "pthread_stubs.h"
33 #include "stdlib_stubs.h"
35 #define pthread_mutex_lock ut_pthread_mutex_lock
36 #define calloc ut_calloc
38 #define pthread_mutex_init ut_pthread_mutex_init
39 #define pthread_mutex_unlock ut_pthread_mutex_unlock
41 #include "tdm_event_loop.c"
43 static void _init_test()
45 TBM_BUFMGR_DEINIT_CALLED = 0;
46 TBM_BO_GET_USER_DATA_NULL = 0;
47 PTHREAD_MUTEX_INIT_ERROR = 0;
49 CALLOC_RETURN_BUFFER = 0;
51 WL_EVENT_LOOP_ADD_FD_ERROR = 0;
52 WL_EVENT_SOURCE_FD_UPDATE_ERROR = 0;
53 WL_EVENT_LOOP_ADD_TIMER_ERROR = 0;
54 WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 0;
57 /* HELPER FUNCTIONS */
59 tdm_error ut_tdm_event_loop_fd_handler(int fd, tdm_event_loop_mask mask,
62 tdm_error ut_tdm_event_loop_timer_handler(void *user_data) { }
66 /* tdm_event_loop_source_timer_update */
68 TEST(tdm_event_loop_source_timer, work_flow_success_2)
70 tdm_error error = TDM_ERROR_OPERATION_FAILED;
71 tdm_error expected_error = TDM_ERROR_NONE;
72 tdm_event_loop_source_timer source;
76 error = tdm_event_loop_source_timer_update(&source, 100);
78 ASSERT_EQ(error, expected_error);
81 TEST(tdm_event_loop_source_timer, work_flow_success_1)
83 tdm_error error = TDM_ERROR_NONE;
84 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
85 tdm_event_loop_source_timer source;
89 WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 1;
91 error = tdm_event_loop_source_timer_update(&source, 100);
93 ASSERT_EQ(error, expected_error);
96 TEST(tdm_event_loop_source_timer_update, null_ptr_fail_1)
98 tdm_error error = TDM_ERROR_NONE;
99 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
103 error = tdm_event_loop_source_timer_update(NULL, 100);
105 ASSERT_EQ(error, expected_error);
108 /* tdm_event_loop_add_timer_handler */
110 TEST(tdm_event_loop_add_timer_handler, work_flow_success_3)
112 tdm_error error = TDM_ERROR_OUT_OF_MEMORY;
113 tdm_error expected_error = TDM_ERROR_NONE;
114 tdm_private_display dpy;
115 tdm_private_loop private_loop;
116 tdm_event_loop_source_timer *timer_source;
117 struct wl_event_loop wl_loop;
121 dpy.private_loop = &private_loop;
122 private_loop.wl_loop = &wl_loop;
125 tdm_event_loop_add_timer_handler(&dpy,
126 ut_tdm_event_loop_timer_handler,
129 ASSERT_EQ(error, expected_error);
133 TEST(tdm_event_loop_add_timer_handler, work_flow_success_2)
135 tdm_error error = TDM_ERROR_NONE;
136 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
137 tdm_private_display dpy;
138 tdm_private_loop private_loop;
139 struct wl_event_loop wl_loop;
143 dpy.private_loop = &private_loop;
144 private_loop.wl_loop = &wl_loop;
145 WL_EVENT_LOOP_ADD_TIMER_ERROR = 1;
147 tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
150 ASSERT_EQ(error, expected_error);
153 TEST(tdm_event_loop_add_timer_handler, work_flow_success_1)
155 tdm_error error = TDM_ERROR_NONE;
156 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
157 tdm_private_display dpy;
158 tdm_private_loop private_loop;
159 struct wl_event_loop wl_loop;
163 dpy.private_loop = &private_loop;
164 private_loop.wl_loop = &wl_loop;
167 tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
170 ASSERT_EQ(error, expected_error);
173 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_4)
175 tdm_error error = TDM_ERROR_NONE;
176 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
177 tdm_private_display dpy;
178 tdm_private_loop private_loop;
182 dpy.private_loop = &private_loop;
183 private_loop.wl_loop = NULL;
185 tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
188 ASSERT_EQ(error, expected_error);
191 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_3)
193 tdm_error error = TDM_ERROR_NONE;
194 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
195 tdm_private_display dpy;
199 dpy.private_loop = NULL;
201 tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
204 ASSERT_EQ(error, expected_error);
207 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_2)
209 tdm_error error = TDM_ERROR_NONE;
210 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
211 tdm_private_display dpy;
215 tdm_event_loop_add_timer_handler(&dpy, NULL,
218 ASSERT_EQ(error, expected_error);
221 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_1)
223 tdm_error error = TDM_ERROR_NONE;
224 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
228 tdm_event_loop_add_timer_handler(NULL, ut_tdm_event_loop_timer_handler,
231 ASSERT_EQ(error, expected_error);
234 /* tdm_event_loop_source_fd_update */
236 TEST(tdm_event_loop_source_fd_update, work_flow_success_2)
238 tdm_error error = TDM_ERROR_OPERATION_FAILED;
239 tdm_error expected_error = TDM_ERROR_NONE;
240 tdm_event_loop_mask mask;
241 tdm_event_loop_source_fd source;
245 error = tdm_event_loop_source_fd_update(&source, mask);
247 ASSERT_EQ(error, expected_error);
250 TEST(tdm_event_loop_source_fd_update, work_flow_success_1)
252 tdm_error error = TDM_ERROR_NONE;
253 tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
254 tdm_event_loop_mask mask;
255 tdm_event_loop_source_fd source;
259 WL_EVENT_SOURCE_FD_UPDATE_ERROR = 1;
261 error = tdm_event_loop_source_fd_update(&source, mask);
263 ASSERT_EQ(error, expected_error);
266 TEST(tdm_event_loop_source_fd_update, null_ptr_fail_1)
268 tdm_error error = TDM_ERROR_NONE;
269 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
270 tdm_event_loop_mask mask;
274 error = tdm_event_loop_source_fd_update(NULL, mask);
276 ASSERT_EQ(error, expected_error);
279 /* tdm_event_loop_add_fd_handler */
281 TEST(tdm_event_loop_add_fd_handler, work_flow_success_3)
283 tdm_error error = TDM_ERROR_INVALID_PARAMETER;
284 tdm_error expected_error = TDM_ERROR_NONE;
285 tdm_event_loop_mask mask;
286 tdm_private_display dpy;
287 tdm_private_loop private_loop;
288 struct wl_event_loop wl_loop;
289 tdm_event_loop_source_fd *fd_source;
293 dpy.private_loop = &private_loop;
294 private_loop.wl_loop = &wl_loop;
297 tdm_event_loop_add_fd_handler(&dpy, 5, mask,
298 ut_tdm_event_loop_fd_handler,
302 ASSERT_EQ(error, expected_error);
305 TEST(tdm_event_loop_add_fd_handler, work_flow_success_2)
307 tdm_error error = TDM_ERROR_NONE;
308 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
309 tdm_event_loop_mask mask;
310 tdm_private_display dpy;
311 tdm_private_loop private_loop;
312 struct wl_event_loop wl_loop;
315 dpy.private_loop = &private_loop;
316 private_loop.wl_loop = &wl_loop;
317 WL_EVENT_LOOP_ADD_FD_ERROR = 1;
319 tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
322 ASSERT_EQ(error, expected_error);
325 TEST(tdm_event_loop_add_fd_handler, work_flow_success_1)
327 tdm_error error = TDM_ERROR_NONE;
328 tdm_error expected_error = TDM_ERROR_OUT_OF_MEMORY;
329 tdm_event_loop_mask mask;
330 tdm_private_display dpy;
331 tdm_private_loop private_loop;
332 struct wl_event_loop wl_loop;
336 dpy.private_loop = &private_loop;
337 private_loop.wl_loop = &wl_loop;
340 tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
343 ASSERT_EQ(error, expected_error);
346 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_5)
348 tdm_error error = TDM_ERROR_NONE;
349 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
350 tdm_event_loop_mask mask;
351 tdm_private_display dpy;
352 tdm_private_loop private_loop;
356 dpy.private_loop = &private_loop;
357 private_loop.wl_loop = NULL;
359 tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
362 ASSERT_EQ(error, expected_error);
365 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_4)
367 tdm_error error = TDM_ERROR_NONE;
368 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
369 tdm_event_loop_mask mask;
370 tdm_private_display dpy;
374 dpy.private_loop = NULL;
376 tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
379 ASSERT_EQ(error, expected_error);
382 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_3)
384 tdm_error error = TDM_ERROR_NONE;
385 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
386 tdm_event_loop_mask mask;
387 tdm_private_display dpy;
391 tdm_event_loop_add_fd_handler(&dpy, 5, mask, NULL,
394 ASSERT_EQ(error, expected_error);
397 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_2)
399 tdm_error error = TDM_ERROR_NONE;
400 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
401 tdm_event_loop_mask mask;
402 tdm_private_display dpy;
406 tdm_event_loop_add_fd_handler(&dpy, -1, mask, ut_tdm_event_loop_fd_handler,
409 ASSERT_EQ(error, expected_error);
412 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_1)
414 tdm_error error = TDM_ERROR_NONE;
415 tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
416 tdm_event_loop_mask mask;
420 tdm_event_loop_add_fd_handler(NULL, 5, mask, ut_tdm_event_loop_fd_handler,
423 ASSERT_EQ(error, expected_error);