66 #include <amxc/amxc_variant.h>
67 #include <amxc/amxc_lqueue.h>
76 #include <amxc/amxc_macros.h>
84 UNUSED const amxc_var_t*
const data,
90 UNUSED const amxc_var_t*
const data,
97 UNUSED const amxc_var_t*
const data,
103 const amxc_var_t*
const data,
104 UNUSED void*
const priv) {
106 assert_ptr_not_equal(data, NULL);
107 const char* txt = amxc_var_constcast(cstring_t, data);
108 assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_CSTRING);
109 assert_ptr_not_equal(txt, NULL);
114 assert_true(amxc_var_is_null(data));
121 const amxc_var_t*
const data,
122 UNUSED void*
const priv) {
124 assert_ptr_not_equal(data, NULL);
125 const char* txt = amxc_var_constcast(cstring_t, data);
126 assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_CSTRING);
127 assert_ptr_not_equal(txt, NULL);
132 assert_true(amxc_var_is_null(data));
140 UNUSED const amxc_var_t*
const data,
141 UNUSED void*
const priv) {
147 UNUSED const amxc_var_t*
const data,
148 UNUSED void*
const priv) {
154 UNUSED const amxc_var_t*
const data,
155 UNUSED void*
const priv) {
162 UNUSED const amxc_var_t*
const data,
163 UNUSED void*
const priv) {
167 assert_non_null(
sig1);
173 check_expected(priv);
178 check_expected(priv);
183 printf(
"Handling events ");
192 const amxc_htable_t* lsigs = NULL;
193 const amxc_htable_t* gsigs = NULL;
201 assert_ptr_not_equal(local_sigmngr, NULL);
206 assert_ptr_not_equal(lsigs, gsigs);
207 assert_int_equal(amxc_htable_size(lsigs), 0);
208 assert_int_equal(amxc_htable_size(gsigs), 6);
211 assert_int_equal(amxc_htable_size(lsigs), 1);
212 assert_int_equal(amxc_htable_size(gsigs), 6);
215 assert_ptr_equal(local_sigmngr, NULL);
225 assert_ptr_not_equal(local_sigmngr, NULL);
228 assert_int_equal(
amxp_signal_new(local_sigmngr, &sig3,
"test:signal3"), 0);
240 assert_ptr_equal(local_sigmngr, NULL);
252 assert_ptr_not_equal(local_sigmngr, NULL);
271 assert_int_equal(
count1, 1);
272 assert_int_equal(
count2, 1);
275 assert_int_equal(
count1, 2);
276 assert_int_equal(
count2, 1);
279 assert_int_equal(
count1, 2);
280 assert_int_equal(
count2, 2);
286 assert_int_equal(
count1, 1);
287 assert_int_equal(
count2, 1);
290 assert_int_equal(
count1, 2);
291 assert_int_equal(
count2, 1);
294 assert_int_equal(
count1, 2);
295 assert_int_equal(
count2, 2);
298 assert_ptr_equal(local_sigmngr, NULL);
301 assert_int_equal(
count1, 2);
302 assert_int_equal(
count2, 3);
317 assert_ptr_not_equal(local_sigmngr, NULL);
334 assert_int_equal(
count1, 0);
335 assert_int_equal(
count2, 0);
340 assert_int_equal(
count1, 0);
341 assert_int_equal(
count2, 0);
343 assert_int_equal(
count1, 1);
344 assert_int_equal(
count2, 1);
349 assert_int_equal(
count1, 1);
350 assert_int_equal(
count2, 1);
352 assert_int_equal(
count1, 2);
353 assert_int_equal(
count2, 2);
358 assert_int_equal(
count1, 2);
359 assert_int_equal(
count2, 2);
361 assert_int_equal(
count1, 3);
362 assert_int_equal(
count2, 2);
368 assert_int_equal(
count1, 3);
369 assert_int_equal(
count2, 2);
371 assert_int_equal(
count1, 3);
372 assert_int_equal(
count2, 3);
386 assert_int_equal(
count1, 3);
387 assert_int_equal(
count2, 3);
389 assert_int_equal(
count1, 3);
390 assert_int_equal(
count2, 3);
393 assert_ptr_equal(local_sigmngr, NULL);
397 amxc_var_clean(&var);
408 assert_ptr_not_equal(local_sigmngr, NULL);
419 assert_int_equal(
count1, 0);
421 assert_int_equal(
count1, 1);
427 assert_int_equal(
count1, 1);
431 assert_int_equal(
count1, 2);
434 assert_ptr_equal(local_sigmngr, NULL);
436 amxc_var_clean(&var);
449 assert_ptr_not_equal(local_sigmngr, NULL);
463 assert_int_equal(
count1, 1);
464 assert_int_equal(
count2, 0);
469 assert_int_equal(
count1, 2);
470 assert_int_equal(
count2, 0);
475 assert_int_equal(
count1, 2);
476 assert_int_equal(
count2, 1);
479 assert_ptr_equal(local_sigmngr, NULL);
481 amxc_var_clean(&var);
494 assert_ptr_not_equal(local_sigmngr, NULL);
507 assert_int_equal(
count1, 1);
508 assert_int_equal(
count2, 0);
513 assert_int_equal(
count1, 2);
514 assert_int_equal(
count2, 0);
519 assert_int_equal(
count1, 3);
520 assert_int_equal(
count2, 0);
523 assert_ptr_equal(local_sigmngr, NULL);
525 amxc_var_clean(&var);
538 assert_ptr_not_equal(local_sigmngr, NULL);
556 assert_int_equal(
count1, 1);
557 assert_int_equal(
count2, 1);
562 assert_int_equal(
count1, 2);
563 assert_int_equal(
count2, 2);
568 assert_int_equal(
count1, 3);
569 assert_int_equal(
count2, 3);
576 assert_int_equal(
count1, 3);
577 assert_int_equal(
count2, 4);
582 assert_int_equal(
count1, 3);
583 assert_int_equal(
count2, 5);
588 assert_int_equal(
count1, 4);
589 assert_int_equal(
count2, 6);
592 assert_ptr_equal(local_sigmngr, NULL);
594 amxc_var_clean(&var);
607 assert_ptr_not_equal(local_sigmngr, NULL);
625 assert_int_equal(
count1, 1);
626 assert_int_equal(
count2, 1);
631 assert_int_equal(
count1, 2);
632 assert_int_equal(
count2, 2);
637 assert_int_equal(
count1, 3);
638 assert_int_equal(
count2, 3);
645 assert_int_equal(
count1, 3);
646 assert_int_equal(
count2, 4);
651 assert_int_equal(
count1, 3);
652 assert_int_equal(
count2, 5);
657 assert_int_equal(
count1, 3);
658 assert_int_equal(
count2, 6);
661 assert_ptr_equal(local_sigmngr, NULL);
663 amxc_var_clean(&var);
706 assert_ptr_equal(local_sigmngr, NULL);
715 printf(
"%p\n", local_sigmngr);
758 const char* priv =
"PRIV DATA";
769 assert_int_equal(
count1, 1);
776 assert_int_equal(
count1, 0);
783 assert_int_equal(
count1, 1);
791 assert_int_equal(
count1, 1);
797 assert_int_equal(
count1, 0);
816 assert_ptr_not_equal(local_sigmngr, NULL);
826 assert_int_equal(
count1, 0);
831 assert_int_equal(
count1, 1);
834 assert_ptr_equal(local_sigmngr, NULL);
846 assert_ptr_not_equal(local_sigmngr, NULL);
883 char* data = calloc(1, 10);
884 strcpy(data,
"abcdefg");
886 amxc_var_init(&var_data);
887 amxc_var_set(cstring_t, &var_data,
"Hello");
901 amxc_var_clean(&var_data);
906 char* data = calloc(1, 10);
907 strcpy(data,
"abcdefg");
923 const char* priv =
"PRIV DATA";
937 assert_int_equal(
count1, 1);
938 assert_int_equal(
count2, 0);
944 assert_int_equal(
count1, 0);
945 assert_int_equal(
count2, 0);
988 assert_int_equal(
count1, 1);
989 assert_int_equal(
count2, 0);
Ambiorix signal manager and signal API header file.
const amxc_htable_t PRIVATE * amxp_get_signals(const amxp_signal_mngr_t *sig_mngr)
Ambiorix slot API header file.
Ambiorix Linux Signal Handling.
int amxp_sigmngr_add_signal(amxp_signal_mngr_t *const sig_mngr, const char *name)
Adds a signal to a signal manager.
int amxp_sigmngr_new(amxp_signal_mngr_t **sig_mngr)
Constructor function, creates a new signal manager instance.
void amxp_sigmngr_trigger_signal(amxp_signal_mngr_t *const sig_mngr, const char *name, const amxc_var_t *const data)
Triggers a signal.
int amxp_sigmngr_remove_signal(amxp_signal_mngr_t *const sig_mngr, const char *name)
Removes a signal from a signal manager.
amxp_signal_t * amxp_sigmngr_find_signal(const amxp_signal_mngr_t *const sig_mngr, const char *name)
Get the pointer to the signal.
int amxp_sigmngr_delete(amxp_signal_mngr_t **sig_mngr)
Destructor function, deletes a signal manager instance.
int amxp_sigmngr_suspend(amxp_signal_mngr_t *const sig_mngr)
Suspends the handling of signals for the signal manager.
int amxp_sigmngr_deferred_call(amxp_signal_mngr_t *const sig_mngr, amxp_deferred_fn_t fn, const amxc_var_t *const data, void *priv)
Defers a function call.
bool amxp_signal_has_slots(const amxp_signal_t *const signal)
Checks if the signal has slots conencted.
int amxp_signal_read(void)
Reads from the amxp signal file descriptor.
const char * amxp_signal_name(const amxp_signal_t *const signal)
Gets the name of the signal.
int amxp_sigmngr_enable(amxp_signal_mngr_t *const sig_mngr, bool enable)
Enables or disables the signal manager.
int amxp_signal_new(amxp_signal_mngr_t *sig_mngr, amxp_signal_t **signal, const char *name)
Constructor function, creates a new signal.
void amxp_signal_trigger(amxp_signal_t *const signal, const amxc_var_t *const data)
Triggers a signal.
int amxp_signal_emit(const amxp_signal_t *const signal, const amxc_var_t *const data)
Emits a signal.
int amxp_sigmngr_resume(amxp_signal_mngr_t *const sig_mngr)
Resumes the handling of signals for the signal manager.
int amxp_signal_fd(void)
Gets the amxp signal file descriptor.
int amxp_signal_disconnect_all(amxp_signal_t *const signal)
Disconnects all slots from the signal.
int amxp_signal_delete(amxp_signal_t **signal)
Destructor function, deletes a signal.
int amxp_sigmngr_emit_signal(const amxp_signal_mngr_t *const sig_mngr, const char *name, const amxc_var_t *const data)
Emits a signal.
void amxp_slot_disconnect_all(amxp_slot_fn_t fn)
Disconnects a slot from all signals it was connected to.
int amxp_slot_connect_filtered(amxp_signal_mngr_t *const sig_mngr, const char *const sig_reg_exp, const char *const expression, amxp_slot_fn_t fn, void *const priv)
Connects a slot (function) to signals using a regular expression.
int amxp_slot_disconnect(amxp_signal_mngr_t *const sig_mngr, const char *const sig_name, amxp_slot_fn_t fn)
Disconnects a slot from (a) signal(s).
int amxp_slot_connect(amxp_signal_mngr_t *const sig_mngr, const char *const sig_name, const char *const expression, amxp_slot_fn_t fn, void *const priv)
Connects a slot (function) to a named signal of a signal manager.
int amxp_slot_disconnect_with_priv(amxp_signal_mngr_t *sig_mngr, amxp_slot_fn_t fn, void *priv)
Disconnects a slot from (a) signal(s).
Structure containing the signal manager information.
Structure containing the signal information.
static amxp_signal_t * sig2
static amxp_signal_t * sig1
void test_can_delete_signal_in_multiple_slots(UNUSED void **state)
void test_sigmngr_add_remove_signal(UNUSED void **state)
static void test_deferred_func_remove_sigmngr(UNUSED const amxc_var_t *const data, void *const priv)
static void test_slot2(const char *const sig_name, const amxc_var_t *const data, UNUSED void *const priv)
static void test_delete_signal_slot2(const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static void test_slot_check_deleted_sigmngr(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
amxp_signal_mngr_t * my_sigmngr
void test_signal_has_slots(UNUSED void **state)
static void test_deferred_func(UNUSED const amxc_var_t *const data, void *const priv)
void test_delete_sigmngr_in_slot(UNUSED void **state)
void test_sigmngr_connect_all2(UNUSED void **state)
void test_sigmngr_emit(UNUSED void **state)
static void test_slot_disconnect_all(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static const char * expected_sig_name
void test_sigmngr_suspend_resume(UNUSED void **state)
void test_deferred_call_delete_sigmngr(UNUSED void **state)
void test_can_trigger_non_registered_signal(UNUSED void **state)
void test_removing_signal_in_slot(UNUSED void **state)
void test_sigmngr_trigger(UNUSED void **state)
static void test_delete_signal_slot(const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
void test_does_not_crash_with_rogue_signal(UNUSED void **state)
void test_sigmngr_find_signal(UNUSED void **state)
void test_can_delete_signal_in_slot(UNUSED void **state)
void test_slot_disconnect_priv(UNUSED void **state)
void test_can_disconnect_in_slot(UNUSED void **state)
void test_sigmngr_disconnect_all_2(UNUSED void **state)
void test_sigmngr_trigger_unknown_signal_should_not_segfault(UNUSED void **state)
void test_sigmngr_crash_connect_not_existing_signal(UNUSED void **state)
void test_sigmngr_disconnect_all_1(UNUSED void **state)
void test_sigmngr_new_delete(UNUSED void **state)
static void test_slot1(const char *const sig_name, const amxc_var_t *const data, UNUSED void *const priv)
static void test_slot_delete_sigmngr(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
void test_sigmngr_connect_all(UNUSED void **state)
void test_deferred_call(UNUSED void **state)
void test_delete_sigmngr_in_regexp_slot(UNUSED void **state)
void test_sigmngr_delete_pending_sigs(UNUSED void **state)
void test_delete_sigmngr_in_slot_and_trigger_slot(UNUSED void **state)
static void test_delete_sigmngr_and_trigger_slot(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static void test_slot_remove_signal(const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
void test_sigmngr_disable(UNUSED void **state)
static void handle_events(void)