event_test.c 1.73 KB
Newer Older
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
/*
 *	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/route.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;

  resource_init();
  olock_init();
58
  timer_init();
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
  io_init();
  rt_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]);

77
  return 1;
78 79 80 81 82 83 84 85 86 87 88 89
}

int
main(int argc, char *argv[])
{
  bt_init(argc, argv);

  bt_test_suite(t_ev_run_list, "Schedule and run 3 events in right order.");

  return bt_exit_value();
}