65 #include <sys/signalfd.h>
69 #include <amxc/amxc.h>
70 #include <amxp/amxp_signal.h>
71 #include <amxp/amxp_slot.h>
72 #include <amxp/amxp_expression.h>
83 #include <amxc/amxc_macros.h>
89 UNUSED
const amxc_var_t*
const args,
90 UNUSED amxc_var_t*
const retval,
93 amxc_var_t* data = (amxc_var_t*) priv;
107 amxc_var_delete(&data);
112 amxc_var_delete(&data);
127 amxc_var_t* enum_data = NULL;
129 amxc_var_init(&value);
130 amxc_var_set(cstring_t, &value,
"TestValue");
132 amxc_var_new(&enum_data);
133 amxc_var_set_type(enum_data, AMXC_VAR_ID_LIST);
134 amxc_var_add(cstring_t, enum_data,
"UDP");
135 amxc_var_add(cstring_t, enum_data,
"TCP");
140 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
147 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
150 assert_int_equal(
amxd_param_new(¶m,
"Param2", AMXC_VAR_ID_BOOL), 0);
152 assert_int_equal(
amxd_param_new(¶m,
"Param3", AMXC_VAR_ID_UINT32), 0);
157 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
166 assert_int_equal(
amxd_param_new(¶m,
"UKey1", AMXC_VAR_ID_CSTRING), 0);
170 assert_int_equal(
amxd_param_new(¶m,
"UKey2", AMXC_VAR_ID_CSTRING), 0);
174 assert_int_equal(
amxd_param_new(¶m,
"KeyParam1", AMXC_VAR_ID_CSTRING), 0);
177 assert_int_equal(
amxd_param_new(¶m,
"KeyParam2", AMXC_VAR_ID_CSTRING), 0);
180 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
182 assert_int_equal(
amxd_param_new(¶m,
"Param2", AMXC_VAR_ID_CSTRING), 0);
187 assert_int_equal(
amxd_param_new(¶m,
"Alias", AMXC_VAR_ID_CSTRING), 0);
191 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
196 assert_int_equal(
amxd_param_new(¶m,
"Alias", AMXC_VAR_ID_CSTRING), 0);
198 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
202 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
207 assert_int_equal(
amxd_param_new(¶m,
"Param1", AMXC_VAR_ID_CSTRING), 0);
211 amxc_var_clean(&value);
237 assert_int_equal(
amxd_param_new(¶m,
"ParamExtra", AMXC_VAR_ID_CSTRING), 0);
251 assert_ptr_equal(
object, NULL);
259 assert_ptr_equal(
object, NULL);
268 assert_ptr_not_equal(
object, NULL);
284 assert_ptr_equal(
object, NULL);
293 assert_ptr_not_equal(
object, NULL);
303 assert_int_equal(
amxd_param_new(¶m,
"ParamExtra2", AMXC_VAR_ID_CSTRING), 0);
334 assert_ptr_not_equal(param, NULL);
340 assert_ptr_not_equal(param, NULL);
347 assert_int_equal(
amxd_param_new(¶m,
"TestParam", AMXC_VAR_ID_CSTRING), 0);
352 assert_ptr_not_equal(
object, NULL);
359 assert_ptr_not_equal(
object, NULL);
366 assert_ptr_not_equal(
object, NULL);
380 assert_ptr_not_equal(
object, NULL);
382 assert_ptr_not_equal(param, NULL);
387 assert_ptr_not_equal(
object, NULL);
389 assert_ptr_not_equal(param, NULL);
394 assert_ptr_not_equal(
object, NULL);
396 assert_ptr_not_equal(param, NULL);
401 assert_ptr_not_equal(
object, NULL);
403 assert_ptr_not_equal(param, NULL);
411 assert_ptr_not_equal(
object, NULL);
415 assert_ptr_not_equal(
object, NULL);
419 assert_ptr_not_equal(
object, NULL);
423 assert_ptr_not_equal(
object, NULL);
431 assert_ptr_not_equal(
object, NULL);
440 amxc_var_t key_params;
441 amxp_expr_t* expr = NULL;
444 amxc_var_init(&key_params);
447 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
448 amxc_var_add_key(cstring_t, &key_params,
"Param1",
"test");
449 amxc_var_add_key(cstring_t, &key_params,
"ParamExtra",
"test");
451 assert_ptr_not_equal(expr, NULL);
454 amxp_expr_delete(&expr);
455 amxc_var_clean(&key_params);
457 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
458 amxc_var_add_key(cstring_t, &key_params,
"Param1",
"TheKeyValue");
459 amxc_var_add_key(cstring_t, &key_params,
"ParamExtra",
"TheKeyValue");
461 assert_ptr_not_equal(expr, NULL);
464 amxp_expr_delete(&expr);
465 amxc_var_clean(&key_params);
471 amxc_var_t key_params;
472 amxc_var_t* param1 = NULL;
473 amxc_var_t* paramextra = NULL;
475 amxc_var_init(&key_params);
476 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
477 param1 = amxc_var_add_key(cstring_t, &key_params,
"Param1",
"TheKeyValue");
478 paramextra = amxc_var_add_key(cstring_t, &key_params,
"ParamExtra",
"TheKeyValue");
482 assert_ptr_equal(instance, NULL);
484 amxc_var_set(cstring_t, param1,
"Unique");
486 assert_ptr_not_equal(instance, NULL);
488 amxc_var_set(cstring_t, paramextra,
"Unique");
491 amxc_var_clean(&key_params);
511 amxc_var_t key_params;
513 amxc_var_t* uk1 = NULL;
514 amxc_var_t* uk2 = NULL;
515 amxc_var_t* k1 = NULL;
516 amxc_var_t* k2 = NULL;
517 amxc_var_t* p1 = NULL;
519 amxc_var_init(&key_params);
520 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
525 uk1 = amxc_var_add_key(cstring_t, &key_params,
"UKey1",
"U1");
526 uk2 = amxc_var_add_key(cstring_t, &key_params,
"UKey2",
"U2");
527 k1 = amxc_var_add_key(cstring_t, &key_params,
"KeyParam1",
"U3");
528 k2 = amxc_var_add_key(cstring_t, &key_params,
"KeyParam2",
"U4");
529 p1 = amxc_var_add_key(cstring_t, &key_params,
"Param1",
"*");
530 amxc_var_add_key(cstring_t, &key_params,
"Param2",
"]");
533 assert_non_null(instance);
536 amxc_var_set(cstring_t, uk1,
"U2");
537 amxc_var_set(cstring_t, uk2,
"U1");
538 amxc_var_set(cstring_t, k1,
"U4");
539 amxc_var_set(cstring_t, k2,
"U3");
540 amxc_var_set(cstring_t, p1,
"[");
542 assert_non_null(instance);
544 amxc_var_set(cstring_t, uk1,
"U9");
545 amxc_var_set(cstring_t, uk2,
"U9");
546 amxc_var_set(cstring_t, k1,
"U4");
547 amxc_var_set(cstring_t, k2,
"U2");
548 amxc_var_set(cstring_t, p1,
"[.*]");
550 assert_non_null(instance);
552 amxc_var_clean(&key_params);
557 assert_non_null(
object);
560 assert_non_null(
object);
562 object =
amxd_dm_findf(&
dm,
"MyObject.UKeyObject.[KeyParam1=='U3'&&KeyParam2=='U4']");
563 assert_non_null(
object);
565 object =
amxd_dm_findf(&
dm,
"MyObject.UKeyObject.[KeyParam1=='U4'&&KeyParam2=='U3']");
566 assert_non_null(
object);
569 assert_non_null(
object);
572 assert_non_null(
object);
575 assert_non_null(
object);
636 amxc_var_t key_params;
638 amxc_var_init(&key_params);
639 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
645 assert_non_null(instance);
648 assert_non_null(text);
649 assert_string_equal(text,
"SillyName");
653 assert_non_null(instance);
656 assert_non_null(text);
657 assert_string_equal(text,
"cpe-AliasObject-2");
660 amxc_var_add_key(cstring_t, &key_params,
"Alias",
"T&T-%CPE");
662 assert_non_null(instance);
665 assert_non_null(text);
666 assert_string_equal(text,
"T&T-%CPE");
669 amxc_var_clean(&key_params);
676 amxc_var_t key_params;
678 amxc_var_init(&key_params);
679 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
685 assert_non_null(instance);
688 assert_string_equal(text,
"");
692 assert_non_null(instance);
695 assert_string_equal(text,
"");
698 amxc_var_add_key(cstring_t, &key_params,
"Alias",
"SillyName");
700 assert_non_null(instance);
703 assert_non_null(text);
704 assert_string_equal(text,
"SillyName");
707 amxc_var_clean(&key_params);
713 amxc_var_t key_params;
714 amxc_var_t* alias = NULL;
716 amxc_var_init(&key_params);
717 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
722 alias = amxc_var_add_key(
bool, &key_params,
"Alias",
true);
724 assert_null(instance);
726 amxc_var_set(ssv_string_t, alias,
"YAA");
729 amxc_var_set(uint32_t, alias, 1024);
731 assert_null(instance);
733 amxc_var_set(csv_string_t, alias,
"YAA2");
736 amxc_var_clean(&key_params);
743 amxc_var_t key_params;
745 amxc_var_init(&key_params);
746 amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
752 assert_null(instance);
754 amxc_var_add_key(cstring_t, &key_params,
"Alias",
"3th-SillyName");
756 assert_null(instance);
758 amxc_var_clean(&key_params);
771 assert_non_null(instance);
774 assert_non_null(text);
775 assert_string_equal(text,
"Unique.Alias.Name");
778 finstance =
amxd_dm_findf(&
dm,
"MyObject.AliasObject.Unique.Alias.Name");
779 assert_null(finstance);
781 finstance =
amxd_dm_findf(&
dm,
"MyObject.AliasObject.\"Unique.Alias.Name\"");
782 assert_null(finstance);
784 finstance =
amxd_dm_findf(&
dm,
"MyObject.AliasObject.'Unique.Alias.Name'");
785 assert_null(finstance);
787 finstance =
amxd_dm_findf(&
dm,
"MyObject.AliasObject.[Unique.Alias.Name]");
788 assert_non_null(finstance);
789 assert_ptr_equal(finstance, instance);
791 finstance =
amxd_dm_findf(&
dm,
"MyObject.AliasObject.[Alias == 'Unique.Alias.Name']");
792 assert_non_null(finstance);
793 assert_ptr_equal(finstance, instance);
806 assert_non_null(
object);
820 assert_non_null(
object);
850 assert_non_null(
object);
858 assert_non_null(
object);
866 assert_non_null(
object);
Ambiorix Data Model Default actions header file.
Ambiorix Data Model API header file.
amxd_status_t amxd_dm_store_mib(amxd_dm_t *const dm, amxd_object_t *const object)
amxd_object_t * amxd_dm_get_mib(amxd_dm_t *const dm, const char *name)
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
static amxd_status_t amxd_dm_get_status(amxd_dm_t *dm)
Ambiorix Data Model API header file.
bool amxd_object_has_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
void amxd_object_set_action_cb_data(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
bool amxd_object_has_keys(amxd_object_t *const instance)
amxd_status_t amxd_object_new_key_expr(amxd_object_t *const templ, amxp_expr_t **expr, const amxc_var_t *const data)
bool amxd_object_has_matching_instances(const amxd_object_t *const templ, amxp_expr_t *expr)
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
amxd_status_t amxd_param_new(amxd_param_t **param, const char *name, const uint32_t type)
amxd_status_t amxd_param_set_value(amxd_param_t *const param, const amxc_var_t *const value)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
amxd_status_t amxd_param_delete(amxd_param_t **param)
bool amxd_param_has_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
void amxd_param_set_action_cb_data(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
amxd_status_t amxd_param_add_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *priv)
Ambiorix Data Model API header file.
enum _amxd_action amxd_action_t
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
@ amxd_status_invalid_path
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
amxd_status_t amxd_dm_add_root_object(amxd_dm_t *const dm, amxd_object_t *const object)
Adds an object to the root of the data model.
amxd_status_t amxd_dm_init(amxd_dm_t *dm)
Initializes a data model structure.
void amxd_dm_clean(amxd_dm_t *dm)
Cleans a data model structure.
amxd_status_t amxd_object_add_object(amxd_object_t *const parent, amxd_object_t *const child)
Adds an object in the data model tree.
#define amxd_object_get_value(type, object, name, status)
Helper macro for getting a value.
#define amxd_object_set_value(type, object, name, value)
Helper macro for setting a value.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
amxd_status_t amxd_object_add_param(amxd_object_t *const object, amxd_param_t *const param)
Adds a parameter definition to an object.
amxd_status_t amxd_object_new_instance(amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
Data model object constructor function.
amxd_status_t amxd_object_new(amxd_object_t **object, const amxd_object_type_t type, const char *name)
Data model object constructor function.
amxd_status_t amxd_object_add_instance(amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
Data model object constructor function.
const char * amxd_object_get_name(const amxd_object_t *const object, const uint32_t flags)
Get the name of the object (or index as a string for instance objects)
amxd_status_t amxd_action_param_check_enum(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check enum parameter validate action implementation.
void amxd_trans_clean(amxd_trans_t *const trans)
Cleans the transaction object.
amxd_status_t amxd_trans_apply(amxd_trans_t *const trans, amxd_dm_t *const dm)
Applies all previously added actions.
#define amxd_trans_set_value(type, trans, name, value)
Helper macro for setting a value.
amxd_status_t amxd_trans_add_inst(amxd_trans_t *const trans, const uint32_t index, const char *name)
Adds an instance add action to a transaction.
amxd_status_t amxd_trans_select_pathf(amxd_trans_t *const trans, const char *path,...) __attribute__((format(printf
Selects an object using a absolute or relative path.
amxd_status_t amxd_trans_init(amxd_trans_t *const trans)
Initializes a transaction object.
void test_can_not_add_key_param_to(UNUSED void **state)
void test_creation_fails_when_alias_value_is_wrong_type(UNUSED void **state)
void test_can_check_object_has_key_parameters(UNUSED void **state)
void test_can_not_delete_key_parameter(UNUSED void **state)
void test_find_fails_with_invalid_expression_part(UNUSED void **state)
void test_key_parameters_must_be_set(UNUSED void **state)
void test_can_build_key_expression(UNUSED void **state)
void test_can_find_object_with_keys(UNUSED void **state)
static void test_build_dm(void)
static amxd_status_t amxd_param_cleanup_data(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, void *priv)
void test_key_flag_is_set(UNUSED void **state)
void test_can_change_mutable_key(UNUSED void **state)
void test_can_create_instances_with_keys_that_has_validation(UNUSED void **state)
void test_can_not_unset_key_attr(UNUSED void **state)
void test_find_fails_with_wildcard(UNUSED void **state)
void test_creation_fails_when_alias_starts_with_number(UNUSED void **state)
void test_can_create_instance_with_non_key_alias(UNUSED void **state)
void test_can_create_instance_with_alias(UNUSED void **state)
void test_key_parameters_must_be_unique(UNUSED void **state)
void test_adding_duplicate_fails(UNUSED void **state)
int test_key_parameter_setup(UNUSED void **state)
void test_can_not_set_key_attr_on_params_of(UNUSED void **state)
int test_key_parameter_teardown(UNUSED void **state)
void test_can_add_key_param_if_no_instances_exist(UNUSED void **state)
void test_key_parameter_values_are_immutable(UNUSED void **state)
void test_can_not_add_key_params_if_instances_exist(UNUSED void **state)
void test_can_find_instances_with_alias(UNUSED void **state)
void test_amxd_object_add_instance_verifies_keys(UNUSED void **state)
void test_can_create_instance_with_unique_keys(UNUSED void **state)
void test_object_has_key_parameters(UNUSED void **state)
void test_changing_mutable_key_fails_if_duplicate(UNUSED void **state)
static amxd_status_t status