not using setenv, getenv for drm fd
[platform/core/uifw/libtdm.git] / ut / src / ut_tdm_event_loop.cpp
1 /**************************************************************************
2  *
3  * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
4  *
5  * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6  *
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:
14  *
15  * The above copyright notice and this permission notice (including the
16  * next paragraph) shall be included in all copies or substantial portions
17  * of the Software.
18  *
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.
26  *
27 **************************************************************************/
28
29 #include "gtest/gtest.h"
30
31 #include "tbm_stubs.h"
32 #include "pthread_stubs.h"
33 #include "stdlib_stubs.h"
34
35 #define pthread_mutex_lock ut_pthread_mutex_lock
36 #define calloc ut_calloc
37 #define free ut_free
38 #define pthread_mutex_init ut_pthread_mutex_init
39 #define pthread_mutex_unlock ut_pthread_mutex_unlock
40
41 #include "tdm_event_loop.c"
42
43 static void _init_test()
44 {
45         TBM_BUFMGR_DEINIT_CALLED = 0;
46         TBM_BO_GET_USER_DATA_NULL = 0;
47         PTHREAD_MUTEX_INIT_ERROR = 0;
48         CALLOC_ERROR = 0;
49         CALLOC_RETURN_BUFFER = 0;
50         FREE_CALLED = 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;
55 }
56
57 /* HELPER FUNCTIONS */
58
59 tdm_error ut_tdm_event_loop_fd_handler(int fd, tdm_event_loop_mask mask,
60                                                                            void *user_data) { }
61
62 tdm_error ut_tdm_event_loop_timer_handler(void *user_data) { }
63
64 /* UNIT TESTS */
65
66 /* tdm_event_loop_source_timer_update */
67
68 TEST(tdm_event_loop_source_timer, work_flow_success_2)
69 {
70         tdm_error error = TDM_ERROR_OPERATION_FAILED;
71         tdm_error expected_error = TDM_ERROR_NONE;
72         tdm_event_loop_source_timer source;
73
74         _init_test();
75
76         error = tdm_event_loop_source_timer_update(&source, 100);
77
78         ASSERT_EQ(error, expected_error);
79 }
80
81 TEST(tdm_event_loop_source_timer, work_flow_success_1)
82 {
83         tdm_error error = TDM_ERROR_NONE;
84         tdm_error expected_error = TDM_ERROR_OPERATION_FAILED;
85         tdm_event_loop_source_timer source;
86
87         _init_test();
88
89         WL_EVENT_SOURCE_TIMER_UPDATE_ERROR = 1;
90
91         error = tdm_event_loop_source_timer_update(&source, 100);
92
93         ASSERT_EQ(error, expected_error);
94 }
95
96 TEST(tdm_event_loop_source_timer_update, null_ptr_fail_1)
97 {
98         tdm_error error = TDM_ERROR_NONE;
99         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
100
101         _init_test();
102
103         error = tdm_event_loop_source_timer_update(NULL, 100);
104
105         ASSERT_EQ(error, expected_error);
106 }
107
108 /* tdm_event_loop_add_timer_handler */
109
110 TEST(tdm_event_loop_add_timer_handler, work_flow_success_3)
111 {
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;
118
119         _init_test();
120
121         dpy.private_loop = &private_loop;
122         private_loop.wl_loop = &wl_loop;
123
124         timer_source =
125                         tdm_event_loop_add_timer_handler(&dpy,
126                                                                                          ut_tdm_event_loop_timer_handler,
127                                                                                          NULL, &error);
128
129         ASSERT_EQ(error, expected_error);
130         free(timer_source);
131 }
132
133 TEST(tdm_event_loop_add_timer_handler, work_flow_success_2)
134 {
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;
140
141         _init_test();
142
143         dpy.private_loop = &private_loop;
144         private_loop.wl_loop = &wl_loop;
145         WL_EVENT_LOOP_ADD_TIMER_ERROR = 1;
146
147         tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
148                                                                          NULL, &error);
149
150         ASSERT_EQ(error, expected_error);
151 }
152
153 TEST(tdm_event_loop_add_timer_handler, work_flow_success_1)
154 {
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;
160
161         _init_test();
162
163         dpy.private_loop = &private_loop;
164         private_loop.wl_loop = &wl_loop;
165         CALLOC_ERROR = 1;
166
167         tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
168                                                                          NULL, &error);
169
170         ASSERT_EQ(error, expected_error);
171 }
172
173 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_4)
174 {
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;
179
180         _init_test();
181
182         dpy.private_loop = &private_loop;
183         private_loop.wl_loop = NULL;
184
185         tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
186                                                                          NULL, &error);
187
188         ASSERT_EQ(error, expected_error);
189 }
190
191 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_3)
192 {
193         tdm_error error = TDM_ERROR_NONE;
194         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
195         tdm_private_display dpy;
196
197         _init_test();
198
199         dpy.private_loop = NULL;
200
201         tdm_event_loop_add_timer_handler(&dpy, ut_tdm_event_loop_timer_handler,
202                                                                          NULL, &error);
203
204         ASSERT_EQ(error, expected_error);
205 }
206
207 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_2)
208 {
209         tdm_error error = TDM_ERROR_NONE;
210         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
211         tdm_private_display dpy;
212
213         _init_test();
214
215         tdm_event_loop_add_timer_handler(&dpy, NULL,
216                                                                          NULL, &error);
217
218         ASSERT_EQ(error, expected_error);
219 }
220
221 TEST(tdm_event_loop_add_timer_handler, null_ptr_fail_1)
222 {
223         tdm_error error = TDM_ERROR_NONE;
224         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
225
226         _init_test();
227
228         tdm_event_loop_add_timer_handler(NULL, ut_tdm_event_loop_timer_handler,
229                                                                          NULL, &error);
230
231         ASSERT_EQ(error, expected_error);
232 }
233
234 /* tdm_event_loop_source_fd_update */
235
236 TEST(tdm_event_loop_source_fd_update, work_flow_success_2)
237 {
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;
242
243         _init_test();
244
245         error = tdm_event_loop_source_fd_update(&source, mask);
246
247         ASSERT_EQ(error, expected_error);
248 }
249
250 TEST(tdm_event_loop_source_fd_update, work_flow_success_1)
251 {
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;
256
257         _init_test();
258
259         WL_EVENT_SOURCE_FD_UPDATE_ERROR = 1;
260
261         error = tdm_event_loop_source_fd_update(&source, mask);
262
263         ASSERT_EQ(error, expected_error);
264 }
265
266 TEST(tdm_event_loop_source_fd_update, null_ptr_fail_1)
267 {
268         tdm_error error = TDM_ERROR_NONE;
269         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
270         tdm_event_loop_mask mask;
271
272         _init_test();
273
274         error = tdm_event_loop_source_fd_update(NULL, mask);
275
276         ASSERT_EQ(error, expected_error);
277 }
278
279 /* tdm_event_loop_add_fd_handler */
280
281 TEST(tdm_event_loop_add_fd_handler, work_flow_success_3)
282 {
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;
290
291         _init_test();
292
293         dpy.private_loop = &private_loop;
294         private_loop.wl_loop = &wl_loop;
295
296         fd_source =
297                         tdm_event_loop_add_fd_handler(&dpy, 5, mask,
298                                                                                   ut_tdm_event_loop_fd_handler,
299                                                                                   NULL, &error);
300         free(fd_source);
301
302         ASSERT_EQ(error, expected_error);
303 }
304
305 TEST(tdm_event_loop_add_fd_handler, work_flow_success_2)
306 {
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;
313         _init_test();
314
315         dpy.private_loop = &private_loop;
316         private_loop.wl_loop = &wl_loop;
317         WL_EVENT_LOOP_ADD_FD_ERROR = 1;
318
319         tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
320                                                                   NULL, &error);
321
322         ASSERT_EQ(error, expected_error);
323 }
324
325 TEST(tdm_event_loop_add_fd_handler, work_flow_success_1)
326 {
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;
333
334         _init_test();
335
336         dpy.private_loop = &private_loop;
337         private_loop.wl_loop = &wl_loop;
338         CALLOC_ERROR = 1;
339
340         tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
341                                                                   NULL, &error);
342
343         ASSERT_EQ(error, expected_error);
344 }
345
346 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_5)
347 {
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;
353
354         _init_test();
355
356         dpy.private_loop = &private_loop;
357         private_loop.wl_loop = NULL;
358
359         tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
360                                                                   NULL, &error);
361
362         ASSERT_EQ(error, expected_error);
363 }
364
365 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_4)
366 {
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;
371
372         _init_test();
373
374         dpy.private_loop = NULL;
375
376         tdm_event_loop_add_fd_handler(&dpy, 5, mask, ut_tdm_event_loop_fd_handler,
377                                                                   NULL, &error);
378
379         ASSERT_EQ(error, expected_error);
380 }
381
382 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_3)
383 {
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;
388
389         _init_test();
390
391         tdm_event_loop_add_fd_handler(&dpy, 5, mask, NULL,
392                                                                   NULL, &error);
393
394         ASSERT_EQ(error, expected_error);
395 }
396
397 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_2)
398 {
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;
403
404         _init_test();
405
406         tdm_event_loop_add_fd_handler(&dpy, -1, mask, ut_tdm_event_loop_fd_handler,
407                                                                   NULL, &error);
408
409         ASSERT_EQ(error, expected_error);
410 }
411
412 TEST(tdm_event_loop_add_fd_handler, null_ptr_fail_1)
413 {
414         tdm_error error = TDM_ERROR_NONE;
415         tdm_error expected_error = TDM_ERROR_INVALID_PARAMETER;
416         tdm_event_loop_mask mask;
417
418         _init_test();
419
420         tdm_event_loop_add_fd_handler(NULL, 5, mask, ut_tdm_event_loop_fd_handler,
421                                                                   NULL, &error);
422
423         ASSERT_EQ(error, expected_error);
424 }