64 #include <amxc/amxc.h>
65 #include <amxp/amxp_signal.h>
66 #include <amxp/amxp_slot.h>
78 #include <amxc/amxc_macros.h>
84 UNUSED
const amxc_var_t*
const args,
85 UNUSED amxc_var_t*
const retval,
88 amxc_var_t* data = (amxc_var_t*) priv;
102 amxc_var_delete(&data);
107 amxc_var_delete(&data);
120 amxc_var_t* data = NULL;
121 amxc_var_t* max = NULL;
122 amxc_var_t* max_param = NULL;
126 amxc_var_new(&max_param);
127 amxc_var_set(int64_t, data, 10);
128 amxc_var_set(int32_t, max, 3);
129 amxc_var_set(cstring_t, max_param,
"MyRoot.Max");
134 assert_int_equal(
amxd_param_new(¶m,
"Max", AMXC_VAR_ID_UINT32), 0);
136 amxc_var_set(uint32_t, ¶m->
value, 2);
143 assert_int_equal(
amxd_param_new(¶m,
"param", AMXC_VAR_ID_UINT32), 0);
147 assert_int_equal(
amxd_param_new(¶m,
"uparam", AMXC_VAR_ID_UINT32), 0);
161 assert_int_equal(
amxd_param_new(¶m,
"templ_param", AMXC_VAR_ID_CSTRING), 0);
164 assert_int_equal(
amxd_param_new(¶m,
"inst_param", AMXC_VAR_ID_BOOL), 0);
166 assert_int_equal(
amxd_param_new(¶m,
"param", AMXC_VAR_ID_UINT32), 0);
171 assert_int_equal(
amxd_param_new(¶m,
"child_param", AMXC_VAR_ID_CSTRING), 0);
174 assert_int_equal(
amxd_param_new(¶m,
"child_param2", AMXC_VAR_ID_BOOL), 0);
176 assert_int_equal(
amxd_param_new(¶m,
"child_param3", AMXC_VAR_ID_UINT64), 0);
185 UNUSED
const amxc_var_t*
const args,
186 UNUSED amxc_var_t*
const retval,
210 amxc_var_t* params = NULL;
212 amxc_var_init(&args);
213 amxc_var_init(&retval);
217 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
219 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
220 assert_ptr_not_equal(amxc_var_get_key(&retval,
"index", AMXC_VAR_FLAG_DEFAULT), NULL);
221 assert_ptr_not_equal(amxc_var_get_key(&retval,
"name", AMXC_VAR_FLAG_DEFAULT), NULL);
222 instance =
amxd_object_get_instance(
template, NULL, amxc_var_constcast(uint32_t, amxc_var_get_key(&retval,
"index", AMXC_VAR_FLAG_DEFAULT)));
223 assert_ptr_not_equal(instance, NULL);
225 amxc_var_clean(&retval);
227 instance =
amxd_object_get_instance(
template, NULL, amxc_var_constcast(uint32_t, amxc_var_get_key(&retval,
"index", AMXC_VAR_FLAG_DEFAULT)));
228 assert_ptr_not_equal(instance, NULL);
230 amxc_var_clean(&retval);
232 instance =
amxd_object_get_instance(
template, NULL, amxc_var_constcast(uint32_t, amxc_var_get_key(&retval,
"index", AMXC_VAR_FLAG_DEFAULT)));
233 assert_ptr_not_equal(instance, NULL);
240 amxc_var_clean(&retval);
242 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
244 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
245 params = amxc_var_add_key(amxc_htable_t, &args,
"parameters", NULL);
246 amxc_var_add_key(
bool, params,
"inst_param",
true);
247 amxc_var_add_key(uint32_t, params,
"param", 666);
248 amxc_var_add_key(uint32_t, &args,
"index", 99);
249 amxc_var_add_key(cstring_t, &args,
"name",
"MyTestInst");
250 amxc_var_add_key(
bool, &args,
"set_priv",
false);
251 amxc_var_clean(&retval);
254 assert_ptr_not_equal(instance, NULL);
260 amxc_var_clean(&retval);
262 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_NULL);
264 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
265 params = amxc_var_add_key(amxc_htable_t, &args,
"parameters", NULL);
266 amxc_var_add_key(
bool, params,
"inst_param",
true);
267 amxc_var_add_key(uint32_t, params,
"param", 666);
268 amxc_var_add_key(uint32_t, &args,
"index", 99);
269 amxc_var_add_key(cstring_t, &args,
"name",
"MyTestInst");
271 amxc_var_clean(&retval);
274 assert_ptr_not_equal(instance, NULL);
276 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
277 params = amxc_var_add_key(amxc_htable_t, &args,
"parameters", NULL);
278 amxc_var_add_key(
bool, params,
"inst_param",
true);
279 amxc_var_add_key(uint32_t, params,
"param", 666);
280 amxc_var_add_key(uint32_t, &args,
"index", 101);
281 amxc_var_add_key(cstring_t, &args,
"name",
"MyTestInst2");
283 amxc_var_clean(&retval);
286 assert_ptr_not_equal(instance, NULL);
288 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
289 params = amxc_var_add_key(amxc_htable_t, &args,
"parameters", NULL);
290 amxc_var_add_key(cstring_t, params,
"inst_param",
"text");
291 amxc_var_add_key(uint32_t, params,
"param", 666);
292 amxc_var_add_key(uint32_t, &args,
"index", 102);
293 amxc_var_add_key(cstring_t, &args,
"name",
"MyTestInst3");
295 amxc_var_add_key(
bool, &args,
"set_read_only",
false);
296 amxc_var_clean(&retval);
299 assert_ptr_equal(instance, NULL);
301 amxc_var_clean(&args);
302 amxc_var_clean(&retval);
335 assert_non_null(
object);
355 assert_non_null(
object);
438 assert_non_null(instance);
440 assert_non_null(instance);
449 instance =
amxd_dm_findf(&
dm,
"MyRoot.MyTemplate2.%u", UINT32_MAX - 1);
450 assert_non_null(instance);
452 assert_non_null(instance);
Ambiorix Data Model Default actions header file.
amxd_status_t amxd_action_object_add_inst(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Ambiorix Data Model API header file.
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
Ambiorix Data Model RPC methods API header file.
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)
amxd_status_t amxd_object_add_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn, void *priv)
void amxd_object_set_action_cb_data(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
amxd_status_t amxd_param_new(amxd_param_t **param, const char *name, const uint32_t type)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
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_unknown_error
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.
amxd_object_t * amxd_object_get_instance(const amxd_object_t *object, const char *name, uint32_t index)
Get an instance of the template object.
#define amxd_object_get_value(type, object, name, status)
Helper macro for getting a value.
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_set_attr(amxd_object_t *const object, const amxd_oattr_id_t attr, const bool enable)
Sets or unsets an object attribute.
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_action_param_check_minimum(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 minimum 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_status_t amxd_trans_select_object(amxd_trans_t *trans, const amxd_object_t *const object)
Selects an object using an object pointer.
amxd_status_t amxd_trans_init(amxd_trans_t *const trans)
Initializes a transaction object.
void test_instance_index_overflow(UNUSED void **state)
void test_instance_add_fails_when_max_instances_reached_with_param_ref(UNUSED void **state)
static amxd_status_t misbehaving_add_instance_action(amxd_object_t *object, UNUSED amxd_param_t *param, amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, UNUSED void *priv)
void test_does_not_segfault_when_add_inst_action_is_misbehaving(UNUSED void **state)
static amxd_status_t test_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_amxd_object_add(UNUSED void **state)
void test_instance_add_fails_when_max_instances_reached(UNUSED void **state)
void test_instance_add_fails_when_invalid_values_provided(UNUSED void **state)
static amxd_object_t * test_build_dm(void)
static amxd_status_t status