} END_TEST START_TEST (test_destructor) { struct event_loop el; int start_mem = mallinfo().uordblks; event_loop_init(&el); event_loop_add_source(&el, (event_source)&ts1); event_loop_add_source(&el, (event_source)&ts2); event_loop_add_source(&el, (event_source)&ts3); ck_assert_int_eq(el.list.next, &ts1.list); ck_assert_int_eq(el.list.next->next, &ts2.list); ck_assert_int_eq(el.list.next->next->next, &ts3.list); ck_assert_int_eq(el.list.next->next->next->next, &el.list); event_loop_destroy(&el); // Every element should just be pointing to itself now ck_assert_int_eq(el.list.next, &el.list); ck_assert_int_eq(el.list.prev, &el.list); ck_assert_int_eq(ts1.list.next, &ts1.list); ck_assert_int_eq(ts1.list.prev, &ts1.list); ck_assert_int_eq(ts2.list.next, &ts2.list); ck_assert_int_eq(ts2.list.prev, &ts2.list); ck_assert_int_eq(ts3.list.next, &ts3.list); ck_assert_int_eq(ts3.list.prev, &ts3.list); ck_assert_int_eq(start_mem, mallinfo().uordblks); } END_TEST
/** * @brief Free any memory associated with a scheduler_t. * * This will stop the interface if it is currently running, and free all the * memory associated with the different regular expression and similar * structures. * * @param scheduler */ void scheduler_destroy(scheduler_t* scheduler) { // TODO interface close // TODO repo close event_loop_destroy(); if(scheduler->main_log) { log_destroy(scheduler->main_log); main_log = NULL; } if(scheduler->process_name) g_free(scheduler->process_name); if(scheduler->sysconfig) fo_config_free(scheduler->sysconfig); if(scheduler->sysconfigdir) g_free(scheduler->sysconfigdir); if(scheduler->host_queue) g_list_free(scheduler->host_queue); if(scheduler->workers) g_thread_pool_free(scheduler->workers, FALSE, TRUE); if(scheduler->email_subject) g_free(scheduler->email_subject); if(scheduler->email_command) g_free(scheduler->email_command); g_sequence_free(scheduler->job_queue); g_regex_unref(scheduler->parse_agent_msg); g_regex_unref(scheduler->parse_db_email); g_regex_unref(scheduler->parse_interface_cmd); g_tree_unref(scheduler->meta_agents); g_tree_unref(scheduler->agents); g_tree_unref(scheduler->host_list); g_tree_unref(scheduler->job_list); g_free(scheduler); }
} END_TEST START_TEST (test_init) { struct event_loop el; int start_mem = mallinfo().uordblks; event_loop_init(&el); ck_assert_int_eq(start_mem, mallinfo().uordblks); event_loop_destroy(&el); ck_assert_int_eq(start_mem, mallinfo().uordblks); // Ensure calling init after calling new doesn't mess the destructor event_loop eln = event_loop_new(); int new_mem = mallinfo().uordblks; ck_assert_int_ne(start_mem, new_mem); event_loop_init(eln); ck_assert_int_eq(new_mem, mallinfo().uordblks); event_loop_destroy(eln); ck_assert_int_eq(start_mem, mallinfo().uordblks); } END_TEST