blob: 5385011a826d880ab2dc70e4ea2690d8ab66effe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/*
* BIRD Library -- Event Processing Tests
*
* (c) 2015 CZ.NIC z.s.p.o.
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include "test/birdtest.h"
#include "lib/net.h"
#include "lib/event.h"
#include "conf/conf.h"
#include "nest/locks.h"
#include "sysdep/unix/unix.h"
#include "nest/iface.h"
#include "nest/rt.h"
#define MAX_NUM 4
int event_check_points[MAX_NUM];
#define event_hook_body(num) \
do { \
bt_debug("Event Hook " #num "\n"); \
event_check_points[num] = 1; \
bt_assert_msg(event_check_points[num-1], "Events should be run in right order"); \
} while (0)
static void event_hook_1(void *data UNUSED) { event_hook_body(1); }
static void event_hook_2(void *data UNUSED) { event_hook_body(2); }
static void event_hook_3(void *data UNUSED) { event_hook_body(3); }
#define schedule_event(num) \
do { \
struct event *event_##num = ev_new(&root_pool); \
event_##num->hook = event_hook_##num; \
ev_schedule(event_##num); \
} while (0)
static void
init_event_check_points(void)
{
int i;
event_check_points[0] = 1;
for (i = 1; i < MAX_NUM; i++)
event_check_points[i] = 0;
}
static int
t_ev_run_list(void)
{
int i;
olock_init();
birdloop_init();
rt_init();
io_init();
if_init();
// roa_init();
config_init();
config = config_alloc("");
init_event_check_points();
schedule_event(1);
schedule_event(2);
schedule_event(3);
ev_run_list(&global_event_list);
for (i = 1; i < MAX_NUM; i++)
bt_assert(event_check_points[i]);
return 1;
}
int
main(int argc, char *argv[])
{
bt_init(argc, argv);
the_bird_lock();
bt_test_suite(t_ev_run_list, "Schedule and run 3 events in right order.");
the_bird_unlock();
return bt_exit_value();
}
|