64 #include <amxc/amxc_variant.h>
65 #include <amxc/amxc_htable.h>
66 #include <amxc/amxc_lqueue.h>
68 #include <amxp/amxp_signal.h>
69 #include <amxp/amxp_slot.h>
71 #include <amxd/amxd_dm.h>
78 #include <amxc/amxc_macros.h>
89 printf(
"Handling events ");
90 while(amxp_signal_read() == 0) {
99 UNUSED amxp_signal_mngr_t* sigmngr) {
128 UNUSED
const char* search_path,
129 UNUSED uint32_t flags,
130 UNUSED uint32_t access,
132 UNUSED
int timeout) {
134 amxc_var_set_type(values, AMXC_VAR_ID_LIST);
135 amxc_var_t* obj_data = amxc_var_add(amxc_htable_t, values, NULL);
138 amxc_string_init(&path, 0);
139 amxc_string_setf(&path,
"%s%s",
object, search_path);
141 amxc_var_add_key(cstring_t, obj_data,
"path", amxc_string_get(&path, 0));
142 amxc_var_dump(values, STDOUT_FILENO);
145 amxc_string_clean(&path);
150 UNUSED
const char*
object) {
156 UNUSED
const char*
object) {
193 UNUSED
const amxc_var_t*
const data,
194 UNUSED
void*
const priv) {
199 UNUSED
const amxc_var_t*
const data,
200 UNUSED
void*
const priv) {
212 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
232 assert_int_equal(
amxb_connect(&ctx,
"zbus://test:80/var/run/zbus.sock"), 0);
248 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
267 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
268 sub_obj =
"myroot.some_object.some_other";
287 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
310 assert_int_equal(
amxb_connect(&ctx,
"ybus://test:80/var/run/ybus.sock"), 0);
331 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
333 assert_non_null(sub);
336 assert_non_null(fsub);
337 assert_ptr_equal(fsub, sub);
343 assert_non_null(sub);
356 UNUSED
const amxc_var_t*
const data,
358 uint32_t* counter = (uint32_t*) priv;
364 uint32_t counter = 0;
366 amxp_sigmngr_add_signal(NULL,
"wait:done");
367 amxp_slot_connect(NULL,
"wait:done", NULL,
test_wait_done, &counter);
372 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
375 assert_int_equal(counter, 1);
381 assert_int_equal(counter, 2);
385 assert_int_equal(
amxb_connect(&ctx,
"zbus://test:80/var/run/zbus.sock"), 0);
390 assert_int_equal(counter, 2);
406 assert_int_equal(
amxb_connect(&ctx,
"xbus://test:80/var/run/xbus.sock"), 0);
409 assert_non_null(sub1);
411 assert_non_null(sub2);
414 assert_non_null(fsub);
415 assert_ptr_equal(sub2, fsub);
418 assert_non_null(fsub);
419 assert_ptr_equal(sub1, fsub);
Ambiorix bus agnostic API header file.
Ambiorix bus agnostic API header file.
struct _amxb_be_funcs amxb_be_funcs_t
int amxb_be_unregister(amxb_be_funcs_t *const funcs)
Unregisters a backend interface.
int amxb_be_register(amxb_be_funcs_t *const funcs)
Registers backend interface.
int amxb_connect(amxb_bus_ctx_t **ctx, const char *uri)
Create a bus connection.
void amxb_free(amxb_bus_ctx_t **ctx)
Frees allocated memory.
int amxb_disconnect(amxb_bus_ctx_t *ctx)
Disconnects a bus connection.
#define AMXB_ERROR_NOT_SUPPORTED_OP
Function/operation not supported.
int amxb_unsubscribe(amxb_bus_ctx_t *const ctx, const char *object, amxp_slot_fn_t slot_cb, void *priv)
Removes an event subscription.
amxb_subscription_t * amxb_subscription_find_child(amxb_bus_ctx_t *bus_ctx, const char *object)
Find a child subscription.
int amxb_subscription_delete(amxb_subscription_t **subscription)
Deletes a subscription object and unsubscribe for events of a object tree.
amxb_subscription_t * amxb_subscription_find_parent(amxb_bus_ctx_t *bus_ctx, const char *object)
Find a parent subscription.
int amxb_subscribe(amxb_bus_ctx_t *const ctx, const char *object, const char *expression, amxp_slot_fn_t slot_cb, void *priv)
Subscribes for events of a object tree.
amxb_subscription_t * amxb_subscription_find(amxb_bus_ctx_t *bus_ctx, const char *object, amxp_slot_fn_t slot_cb, void *priv)
Find an exact subscription.
int amxb_wait_for_object(const char *object)
Checks if an object is available, if not waits for it.
int amxb_subscription_new(amxb_subscription_t **subscription, amxb_bus_ctx_t *bus_ctx, const char *object, const char *expression, amxp_slot_fn_t slot_cb, void *priv)
Creates a subscription object and subscribes for events of a object tree.
The back-end interface structure.
amxb_be_connect_fn_t connect
void test_amxb_subscription_find(UNUSED void **state)
static int dummy_describe(void *const ctx, const char *object, UNUSED const char *search_path, UNUSED uint32_t flags, UNUSED uint32_t access, amxc_var_t *values, UNUSED int timeout)
static amxb_be_funcs_t dummy_be1
static int dummy_unsubscribe(void *const ctx, UNUSED const char *object)
static void * dummy_connect(const char *host, const char *port, const char *path, UNUSED amxp_signal_mngr_t *sigmngr)
static char verify_port[64]
static int dummy_subscribe(void *const ctx, UNUSED const char *object)
static int dummy_get_fd(void *ctx)
void test_amxb_subscribe_invalid_path(UNUSED void **state)
static char verify_host[64]
static amxb_be_funcs_t dummy_be4
int __wrap_dlclose(void *handle)
static int dummy_disconnect(void *ctx)
static void test_wait_done(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, void *const priv)
void test_amxb_subscribe(UNUSED void **state)
static void dummy_free(void *ctx)
void test_amxb_subscription_new(UNUSED void **state)
void test_amxb_unsubscribe(UNUSED void **state)
static amxb_be_funcs_t dummy_be3
static char verify_path[64]
static const char * sub_obj
void test_amxb_subscribe_should_not_segfault(UNUSED void **state)
static void dummy_notify_handler2(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static int dummy_read(void *const ctx)
static void dummy_notify_handler(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
void test_amxb_wait_for(UNUSED void **state)
static void handle_events(void)