62 #include <sys/types.h>
65 #include <amxc/amxc.h>
66 #include <amxp/amxp.h>
68 #include <amxd/amxd_dm.h>
69 #include <amxo/amxo.h>
77 #include <amxc/amxc_macros.h>
83 const amxc_var_t*
const data,
85 int* event_count = (
int*) priv;
86 printf(
"Event received = %s\n", sig_name);
88 amxc_var_dump(data, STDOUT_FILENO);
94 printf(
"Handling events ");
95 while(amxp_signal_read() == 0) {
106 amxc_var_dump(req->
result, STDOUT_FILENO);
115 amxc_var_dump(req->
result, STDOUT_FILENO);
122 amxd_object_t* root_obj = NULL;
128 assert_int_equal(amxd_dm_init(&
dm), amxd_status_ok);
129 assert_int_equal(amxo_parser_init(&
parser), 0);
131 root_obj = amxd_dm_get_root(&
dm);
132 assert_non_null(root_obj);
134 assert_int_equal(amxo_parser_parse_file(&
parser,
"./test.odl", root_obj), 0);
149 amxo_parser_clean(&
parser);
159 amxc_var_t* results = NULL;
160 amxc_var_init(&values);
162 assert_int_equal(
amxb_call(
bus_ctx,
"Device.Ethernet.Interface.1",
"_get", NULL, NULL, 1), 0);
164 assert_int_equal(
amxb_call(
bus_ctx,
"Device.Ethernet.Interface.1",
"_get", NULL, &values, 1), 0);
165 amxc_var_dump(&values, STDOUT_FILENO);
166 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
167 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
168 assert_int_equal(amxc_htable_size(&results->data.vm), 1);
170 assert_int_not_equal(
amxb_call(
bus_ctx,
"Device.Link.Interface.1",
"_get", NULL, NULL, 1), 0);
172 amxc_var_clean(&values);
179 assert_non_null(request);
181 amxc_var_dump(request->
result, STDOUT_FILENO);
183 assert_null(request);
186 assert_non_null(request);
191 assert_non_null(request);
195 assert_non_null(request);
201 amxc_var_t* results = NULL;
202 amxc_var_init(&values);
204 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.1.Status", 0, &values, 1), 0);
205 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
206 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
207 amxc_var_dump(&values, STDOUT_FILENO);
208 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
209 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
210 assert_int_equal(amxc_htable_size(&results->data.vm), 1);
212 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.*.Status", 0, &values, 1), 0);
213 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
214 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
215 amxc_var_dump(&values, STDOUT_FILENO);
216 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
217 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
218 assert_int_equal(amxc_htable_size(&results->data.vm), 4);
220 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.[Enable == true].Status", 0, &values, 1), 0);
221 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
222 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
223 amxc_var_dump(&values, STDOUT_FILENO);
224 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
225 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
226 assert_int_equal(amxc_htable_size(&results->data.vm), 2);
228 assert_int_not_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Link.[Enable == true].Status", 0, &values, 1), 0);
231 amxc_var_dump(&values, STDOUT_FILENO);
233 amxc_var_dump(&values, STDOUT_FILENO);
235 amxc_var_clean(&values);
240 amxc_var_init(&values);
243 amxc_var_init(&paths);
244 amxc_var_set_type(&paths, AMXC_VAR_ID_LIST);
245 amxc_var_add(cstring_t, &paths,
"Device.Ethernet.Interface.1.Status");
246 amxc_var_add(cstring_t, &paths,
"Device.Ethernet.Interface.20.");
247 amxc_var_add(cstring_t, &paths,
"Device.time.");
250 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_HTABLE);
251 assert_int_equal(amxc_var_type_of(GETP_ARG(&values,
"'Device.Ethernet.Interface.1.Status'.result")), AMXC_VAR_ID_LIST);
252 assert_int_equal(GETP_UINT32(&values,
"'Device.Ethernet.Interface.1.Status'.status"), 0);
253 assert_string_equal(GETP_CHAR(&values,
"'Device.Ethernet.Interface.1.Status'.result.0.'Device.Ethernet.Interface.1.'.Status"),
"Up");
255 amxc_var_dump(&values, STDOUT_FILENO);
256 assert_int_equal(amxc_var_type_of(GETP_ARG(&values,
"'Device.Ethernet.Interface.20.'.result")), AMXC_VAR_ID_LIST);
257 assert_int_equal(GETP_UINT32(&values,
"'Device.Ethernet.Interface.20.'.status"), 2);
259 assert_int_equal(amxc_var_type_of(GETP_ARG(&values,
"'Device.time.'.result")), AMXC_VAR_ID_LIST);
260 assert_int_equal(amxc_var_type_of(GETP_ARG(&values,
"'Device.time.")), AMXC_VAR_ID_HTABLE);
261 assert_int_equal(GETP_UINT32(&values,
"'Device.time.'.status"), 2);
263 amxc_var_dump(&values, STDOUT_FILENO);
264 amxc_var_clean(&values);
265 amxc_var_clean(&paths);
270 amxc_var_t* results = NULL;
271 amxc_var_init(&values);
274 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
275 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
276 amxc_var_dump(&values, STDOUT_FILENO);
277 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
278 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
279 assert_int_equal(amxc_htable_size(&results->data.vm), 4);
281 amxc_var_clean(&values);
286 amxc_var_t* results = NULL;
287 amxc_var_init(&values);
289 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Reference+.", 0, &values, 1), 0);
290 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
291 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
292 amxc_var_dump(&values, STDOUT_FILENO);
293 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
294 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
295 assert_int_equal(amxc_htable_size(&results->data.vm), 1);
297 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Refs#2+.", 0, &values, 1), 0);
298 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
299 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
300 amxc_var_dump(&values, STDOUT_FILENO);
301 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
302 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
303 assert_int_equal(amxc_htable_size(&results->data.vm), 1);
305 assert_int_not_equal(
amxb_get(
bus_ctx,
"Device.Refs#85+.", 0, &values, 1), 0);
306 assert_int_not_equal(
amxb_get(
bus_ctx,
"Device.Refs#0+.", 0, &values, 1), 0);
308 amxc_var_clean(&values);
313 amxc_var_t* results = NULL;
314 amxc_var_init(&values);
316 assert_int_equal(
amxb_get(
bus_ctx,
"Device.TestObject.[Enabled == false].Reference+.", 0, &values, 1), 0);
317 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
318 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
319 amxc_var_dump(&values, STDOUT_FILENO);
320 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
321 assert_int_equal(amxc_var_type_of(results), AMXC_VAR_ID_HTABLE);
322 assert_int_equal(amxc_htable_size(&results->data.vm), 1);
324 assert_int_not_equal(
amxb_get(
bus_ctx,
"Device.TestObject.[Enabled == true].Reference+.", 0, &values, 1), 0);
326 amxc_var_clean(&values);
332 amxc_var_t* results = NULL;
334 amxc_var_init(&values);
336 amxc_var_set_type(&values, AMXC_VAR_ID_HTABLE);
337 amxc_var_add_key(
bool, &values,
"Enable",
false);
338 amxc_var_add_key(cstring_t, &values,
"Status",
"Dormant");
339 assert_int_equal(
amxb_set(
bus_ctx,
"Device.Ethernet.Interface.1", &values, &ret, 1), 0);
340 amxc_var_dump(&ret, STDOUT_FILENO);
341 assert_int_equal(amxc_var_type_of(&ret), AMXC_VAR_ID_LIST);
342 assert_int_equal(amxc_var_type_of(GETI_ARG(&ret, 0)), AMXC_VAR_ID_HTABLE);
343 results = GETP_ARG(&ret,
"0.'Device.Ethernet.Interface.1.'");
344 assert_non_null(results);
345 assert_non_null(GET_ARG(results,
"Enable"));
346 assert_non_null(GET_ARG(results,
"Status"));
348 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.1.", 0, &values, 1), 0);
349 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
350 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
351 amxc_var_dump(&values, STDOUT_FILENO);
352 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
353 assert_non_null(results);
354 results = amxc_var_get_key(results,
"Device.Ethernet.Interface.1.", AMXC_VAR_FLAG_DEFAULT);
355 assert_non_null(results);
356 results = amxc_var_get_key(results,
"Status", AMXC_VAR_FLAG_DEFAULT);
357 assert_non_null(results);
358 assert_string_equal(amxc_var_constcast(cstring_t, results),
"Dormant");
360 assert_int_not_equal(
amxb_set(
bus_ctx,
"Device.Link.Interface.1", &values, &ret, 1), 0);
362 amxc_var_clean(&ret);
363 amxc_var_clean(&values);
369 amxc_var_t* results = NULL;
371 amxc_var_init(&values);
373 amxc_var_set_type(&values, AMXC_VAR_ID_HTABLE);
374 amxc_var_add_key(
bool, &values,
"Enable",
false);
375 amxc_var_add_key(cstring_t, &values,
"Status",
"Unknown");
377 assert_int_equal(
amxb_add(
bus_ctx,
"Device.Ethernet.Interface", 0, NULL, &values, &ret, 1), 0);
378 assert_int_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.5.", 0, &values, 1), 0);
379 assert_int_equal(amxc_var_type_of(&values), AMXC_VAR_ID_LIST);
380 assert_int_equal(amxc_llist_size(&values.data.vl), 1);
381 amxc_var_dump(&values, STDOUT_FILENO);
382 results = amxc_var_get_index(&values, 0, AMXC_VAR_FLAG_DEFAULT);
383 results = amxc_var_get_key(results,
"Device.Ethernet.Interface.5.", AMXC_VAR_FLAG_DEFAULT);
384 results = amxc_var_get_key(results,
"Status", AMXC_VAR_FLAG_DEFAULT);
385 assert_string_equal(amxc_var_constcast(cstring_t, results),
"Unknown");
387 assert_int_not_equal(
amxb_add(
bus_ctx,
"Device.Ethernet.Link", 0, NULL, NULL, NULL, 1), 0);
389 amxc_var_clean(&ret);
390 amxc_var_clean(&values);
397 amxc_var_init(&values);
399 assert_int_equal(
amxb_del(
bus_ctx,
"Device.Ethernet.Interface", 5, NULL, &ret, 1), 0);
400 assert_int_not_equal(
amxb_get(
bus_ctx,
"Device.Ethernet.Interface.5.", 0, &values, 1), 0);
402 assert_int_not_equal(
amxb_del(
bus_ctx,
"Device.Ethernet.Interface", 5, NULL, &ret, 1), 0);
404 amxc_var_clean(&ret);
405 amxc_var_clean(&values);
410 const char* expression1 =
"'Device.Ethernet.Interface.3.Stats.' in search_path('Device.Ethernet.Interface.*.Stats.')";
411 const char* expression2 =
"'Device.Ethernet.Interface.3.Stats.' in search_path('Device.Ethernet.Interface.3.Stats.')";
412 const char* expression3 =
"'Device.Ethernet.Interface.3.Stats.' in search_path('Device.Ethernet.Interface.[Enable == 1].Stats.')";
414 amxp_expr_init(&expr, expression1);
415 assert_true(amxp_expr_evaluate(&expr, NULL, NULL, NULL));
416 amxp_expr_clean(&expr);
418 amxp_expr_init(&expr, expression2);
419 assert_true(amxp_expr_evaluate(&expr, NULL, NULL, NULL));
420 amxp_expr_clean(&expr);
422 amxp_expr_init(&expr, expression3);
423 assert_false(amxp_expr_evaluate(&expr, NULL, NULL, NULL));
424 amxp_expr_clean(&expr);
434 assert_int_equal(
amxb_add(
bus_ctx,
"Device.Ethernet.Interface", 0, NULL, NULL, NULL, 1), 0);
437 assert_int_not_equal(event_count, 0);
448 assert_int_equal(event_count, 0);
459 assert_int_equal(
amxb_add(
bus_ctx,
"Device.Ethernet.Interface", 0, NULL, NULL, NULL, 1), 0);
462 assert_int_not_equal(event_count, 0);
477 assert_int_not_equal(
amxb_publish(NULL,
"Device.Ethernet.Interface.1.",
"test", NULL), 0);
479 assert_int_not_equal(
amxb_publish(
bus_ctx,
"Device.Ethernet.Interface.1.", NULL, NULL), 0);
486 UNUSED
const amxc_var_t*
const data,
490 assert_int_equal(amxc_var_type_of(data), AMXC_VAR_ID_LIST);
Ambiorix bus agnostic API header file.
#define AMXB_FLAG_INSTANCES
#define AMXB_FLAG_FUNCTIONS
#define AMXB_FLAG_PARAMETERS
#define AMXB_FLAG_OBJECTS
Ambiorix Bus Agnostic Data Model registration.
int test_unregister_dummy_be(void)
int test_register_dummy_be(void)
void amxb_be_remove_all(void)
Removes and unloads all backends.
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.
int amxb_publish(amxb_bus_ctx_t *const ctx, const char *object, const char *name, amxc_var_t *data)
Publish an event for a specific object.
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.
int amxb_wait_for_request(amxb_request_t *req, int timeout)
Waits for an asynchronous remote function invoke to finish.
int amxb_close_request(amxb_request_t **req)
Closes a previously create remote function called context.
int amxb_del(amxb_bus_ctx_t *const bus_ctx, const char *object, uint32_t index, const char *name, amxc_var_t *ret, int timeout)
Deletes one or more instances of a multi-instance object.
int amxb_set(amxb_bus_ctx_t *const bus_ctx, const char *object, amxc_var_t *values, amxc_var_t *ret, int timeout)
Sets parameter values of one single object or of multiple instance objects.
amxb_request_t * amxb_async_call(amxb_bus_ctx_t *const bus_ctx, const char *object, const char *method, amxc_var_t *args, amxb_be_done_cb_fn_t done_fn, void *priv)
Invokes a data model function.
int amxb_call(amxb_bus_ctx_t *const bus_ctx, const char *object, const char *method, amxc_var_t *args, amxc_var_t *ret, int timeout)
Invokes a data model function.
int amxb_get_multiple(amxb_bus_ctx_t *const bus_ctx, amxc_var_t *req_paths, int32_t depth, amxc_var_t *ret, int timeout)
Fetches one or more (root) objects or multiple parameters.
int amxb_get(amxb_bus_ctx_t *const bus_ctx, const char *object, int32_t depth, amxc_var_t *ret, int timeout)
Fetches one or more objects or a single parameter.
int amxb_get_instances(amxb_bus_ctx_t *const bus_ctx, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
Fetches the instances and the unique keys of a multi-instance object.
int amxb_add(amxb_bus_ctx_t *const bus_ctx, const char *object, uint32_t index, const char *name, amxc_var_t *values, amxc_var_t *ret, int timeout)
Adds an instance to a multi-instance object.
int amxb_list(amxb_bus_ctx_t *const bus_ctx, const char *object, uint32_t flags, amxb_be_cb_fn_t fn, void *priv)
List the service elements/nodes of an object.
int amxb_register(amxb_bus_ctx_t *const ctx, amxd_dm_t *const dm)
Registers a data model to a certain bus context (connection).
void test_amxb_set(UNUSED void **state)
void test_amxb_get_instances(UNUSED void **state)
void test_amxb_del(UNUSED void **state)
void test_amxb_list(UNUSED void **state)
void test_amxb_add(UNUSED void **state)
int test_amxb_local_setup(UNUSED void **state)
static amxo_parser_t parser
void test_amxb_subscribe_instance(UNUSED void **state)
void test_amxb_get_multiple(UNUSED void **state)
static void test_request_done_keep(UNUSED const amxb_bus_ctx_t *bus_ctx, amxb_request_t *req, int status, UNUSED void *priv)
void test_search_path_expr_func(UNUSED void **state)
void test_amxb_publish(UNUSED void **state)
void test_amxb_async_call(UNUSED void **state)
static amxb_bus_ctx_t * bus_ctx
void test_amxb_subscribe(UNUSED void **state)
void test_amxb_call(UNUSED void **state)
void test_amxb_get_key_path_reference(UNUSED void **state)
int test_amxb_local_teardown(UNUSED void **state)
static void test_request_done(UNUSED const amxb_bus_ctx_t *bus_ctx, amxb_request_t *req, int status, UNUSED void *priv)
void test_amxb_get(UNUSED void **state)
void test_amxb_subscribe_non_existing(UNUSED void **state)
void test_amxb_subscribe_twice(UNUSED void **state)
static void event_handler(const char *const sig_name, const amxc_var_t *const data, void *const priv)
static void handle_events(void)
void test_amxb_get_reference(UNUSED void **state)
static void test_amxb_list_cb(const amxb_bus_ctx_t *bus_ctx, UNUSED const amxc_var_t *const data, UNUSED void *priv)