64 #include <amxc/amxc.h>
65 #include <amxp/amxp_signal.h>
66 #include <amxp/amxp_slot.h>
84 amxc_var_t* value = NULL;
85 amxc_var_t* obj_params = NULL;
88 amxc_var_init(&retval);
95 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
96 amxc_var_add_key(uint32_t, &args,
"depth", 1);
99 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
100 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 2);
102 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
103 amxc_var_add_key(uint32_t, &args,
"depth", 1);
106 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
107 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 3);
109 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
111 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
112 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
113 obj_params = amxc_var_get_key(&retval,
"parent.2.", AMXC_VAR_FLAG_DEFAULT);
114 assert_int_equal(amxc_var_type_of(obj_params), AMXC_VAR_ID_HTABLE);
115 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, obj_params)), 3);
116 value = amxc_var_get_path(obj_params,
"inst_param", AMXC_VAR_FLAG_DEFAULT);
117 assert_ptr_not_equal(value, NULL);
118 value = amxc_var_get_path(obj_params,
"param", AMXC_VAR_FLAG_DEFAULT);
119 assert_ptr_not_equal(value, NULL);
121 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
123 amxc_var_dump(&retval, STDOUT_FILENO);
126 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
128 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
129 obj_params = amxc_var_get_key(&retval,
"parent.2.child.", AMXC_VAR_FLAG_DEFAULT);
130 assert_int_equal(amxc_var_type_of(obj_params), AMXC_VAR_ID_HTABLE);
131 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, obj_params)), 2);
132 value = amxc_var_get_path(obj_params,
"child_param2", AMXC_VAR_FLAG_DEFAULT);
133 assert_ptr_not_equal(value, NULL);
134 value = amxc_var_get_path(obj_params,
"child_param3", AMXC_VAR_FLAG_DEFAULT);
135 assert_ptr_not_equal(value, NULL);
136 value = amxc_var_get_path(obj_params,
"child_param", AMXC_VAR_FLAG_DEFAULT);
137 assert_ptr_equal(value, NULL);
139 amxc_var_clean(&args);
140 amxc_var_clean(&retval);
150 amxc_var_t* value = NULL;
151 amxc_var_t* params = NULL;
152 amxc_var_t* obj_params = NULL;
154 amxc_var_init(&args);
155 amxc_var_init(&retval);
164 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
165 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
166 amxc_var_add(cstring_t, params,
"param");
167 amxc_var_add_key(uint32_t, &args,
"depth", 1);
169 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_NULL);
171 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
172 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
173 amxc_var_add(cstring_t, params,
"child_param2");
175 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
176 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
177 obj_params = amxc_var_get_key(&retval,
"parent.2.child.", AMXC_VAR_FLAG_DEFAULT);
178 assert_int_equal(amxc_var_type_of(obj_params), AMXC_VAR_ID_HTABLE);
179 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, obj_params)), 1);
180 value = amxc_var_get_path(obj_params,
"child_param2", AMXC_VAR_FLAG_DEFAULT);
181 assert_ptr_not_equal(value, NULL);
182 value = amxc_var_get_path(obj_params,
"child_param3", AMXC_VAR_FLAG_DEFAULT);
183 assert_ptr_equal(value, NULL);
184 value = amxc_var_get_path(obj_params,
"child_param", AMXC_VAR_FLAG_DEFAULT);
185 assert_ptr_equal(value, NULL);
187 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
188 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
189 amxc_var_add(cstring_t, params,
"inst_param");
191 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
192 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
193 obj_params = amxc_var_get_key(&retval,
"parent.3.", AMXC_VAR_FLAG_DEFAULT);
194 assert_int_equal(amxc_var_type_of(obj_params), AMXC_VAR_ID_HTABLE);
195 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, obj_params)), 1);
196 value = amxc_var_get_path(obj_params,
"inst_param", AMXC_VAR_FLAG_DEFAULT);
197 assert_ptr_not_equal(value, NULL);
199 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
200 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
201 amxc_var_add(cstring_t, params,
"Alias");
203 amxc_var_dump(&retval, STDOUT_FILENO);
206 assert_non_null(
object);
208 assert_non_null(
object);
212 amxc_var_clean(&args);
213 amxc_var_clean(&retval);
222 amxc_var_t* params = NULL;
224 amxc_var_init(&args);
225 amxc_var_init(&retval);
231 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
232 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
233 amxc_var_add(uint32_t, params, 1234);
236 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
237 params = amxc_var_add_key(amxc_llist_t, &args,
"parameters", NULL);
238 amxc_var_add(cstring_t, params,
"invalid_name");
241 amxc_var_clean(&args);
242 amxc_var_clean(&retval);
253 amxc_var_init(&args);
254 amxc_var_init(&retval);
274 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
275 amxc_var_add_key(cstring_t, &args,
"rel_path",
"[child.child_param2 == true].");
277 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
278 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
280 amxc_var_add_key(cstring_t, &args,
"rel_path",
"[child.child_param3 > 100].");
282 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
283 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 2);
285 amxc_var_add_key(cstring_t, &args,
"rel_path",
"[child.child_param3 > 100]");
287 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_NULL);
289 amxc_var_add_key(cstring_t, &args,
"rel_path",
"[child.child_param3 < 100].");
291 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
292 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 0);
294 amxc_var_add_key(cstring_t, &args,
"rel_path",
"1.");
296 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
297 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
299 amxc_var_add_key(cstring_t, &args,
"rel_path",
"1");
301 amxc_var_dump(&retval, STDOUT_FILENO);
302 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_NULL);
304 amxc_var_add_key(cstring_t, &args,
"rel_path",
"1.child.child_param3");
306 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
307 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
309 amxc_var_clean(&args);
310 amxc_var_clean(&retval);
320 amxc_var_t* value = NULL;
321 amxc_var_t* obj_params = NULL;
323 amxc_var_init(&args);
324 amxc_var_init(&retval);
331 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
332 amxc_var_add_key(uint32_t, &args,
"depth", 1);
335 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
336 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 2);
338 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
339 amxc_var_add_key(uint32_t, &args,
"depth", 1);
342 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
343 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 3);
345 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
347 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
348 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, &retval)), 1);
349 obj_params = amxc_var_get_key(&retval,
"parent.2.", AMXC_VAR_FLAG_DEFAULT);
350 assert_int_equal(amxc_var_type_of(obj_params), AMXC_VAR_ID_HTABLE);
351 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, obj_params)), 3);
352 value = amxc_var_get_path(obj_params,
"inst_param", AMXC_VAR_FLAG_DEFAULT);
353 assert_ptr_not_equal(value, NULL);
354 value = amxc_var_get_path(obj_params,
"param", AMXC_VAR_FLAG_DEFAULT);
355 assert_ptr_not_equal(value, NULL);
357 amxc_var_clean(&args);
358 amxc_var_clean(&retval);
366 amxc_var_t* var_obj = NULL;
367 amxc_var_t* var_sub_obj = NULL;
369 amxc_var_init(&args);
370 amxc_var_init(&retval);
372 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
373 amxc_var_add_key(int32_t, &args,
"depth", INT32_MAX);
375 amxc_var_dump(&retval, STDOUT_FILENO);
377 var_obj = amxc_var_get_key(&retval,
"MyRoot.", AMXC_VAR_FLAG_DEFAULT);
378 assert_int_equal(amxc_var_type_of(var_obj), AMXC_VAR_ID_HTABLE);
379 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_obj)), 3);
381 var_sub_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.", AMXC_VAR_FLAG_DEFAULT);
382 assert_int_equal(amxc_var_type_of(var_sub_obj), AMXC_VAR_ID_HTABLE);
383 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_sub_obj)), 4);
384 var_sub_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.SubChild.", AMXC_VAR_FLAG_DEFAULT);
385 assert_int_equal(amxc_var_type_of(var_sub_obj), AMXC_VAR_ID_HTABLE);
386 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_sub_obj)), 3);
387 var_sub_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.SubChild.SubTemplate.1.", AMXC_VAR_FLAG_DEFAULT);
388 assert_int_equal(amxc_var_type_of(var_sub_obj), AMXC_VAR_ID_HTABLE);
389 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_sub_obj)), 3);
391 amxc_var_clean(&args);
392 amxc_var_clean(&retval);
400 amxc_var_t* var_obj = NULL;
401 amxc_var_t* var_sub_obj = NULL;
403 amxc_var_init(&args);
404 amxc_var_init(&retval);
407 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
408 amxc_var_add_key(int32_t, &args,
"depth", INT32_MAX);
410 assert_int_equal(amxc_var_type_of(&retval), AMXC_VAR_ID_HTABLE);
412 amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
413 amxc_var_add_key(int32_t, &args,
"depth", INT32_MAX);
414 amxc_var_add_key(cstring_t, &args,
"rel_path",
"*.");
417 amxc_var_dump(&retval, STDOUT_FILENO);
419 var_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.", AMXC_VAR_FLAG_DEFAULT);
420 assert_int_equal(amxc_var_type_of(var_obj), AMXC_VAR_ID_HTABLE);
421 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_obj)), 4);
423 var_sub_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.SubChild.", AMXC_VAR_FLAG_DEFAULT);
424 assert_int_equal(amxc_var_type_of(var_sub_obj), AMXC_VAR_ID_HTABLE);
425 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_sub_obj)), 3);
426 var_sub_obj = amxc_var_get_key(&retval,
"MyRoot.MyChild.1.SubChild.SubTemplate.1.", AMXC_VAR_FLAG_DEFAULT);
427 assert_int_equal(amxc_var_type_of(var_sub_obj), AMXC_VAR_ID_HTABLE);
428 assert_int_equal(amxc_htable_size(amxc_var_constcast(amxc_htable_t, var_sub_obj)), 3);
430 amxc_var_clean(&args);
431 amxc_var_clean(&retval);
Ambiorix Data Model Default actions header file.
amxd_status_t amxd_action_object_read(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.
Ambiorix Data Model RPC methods API header file.
Ambiorix Data Model API header file.
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)
Ambiorix Data Model API header file.
@ amxd_dm_access_protected
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_object_t * amxd_object_findf(amxd_object_t *object, const char *rel_path,...) __attribute__((format(printf
Find an object in the data model tree, starting from an object.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxd_status_t amxd_object_invoke_function(amxd_object_t *const object, const char *func_name, amxc_var_t *const args, amxc_var_t *const ret)
Calls an object RPC method.
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_trans_set_attr(amxd_trans_t *trans, amxd_tattr_id_t attr, bool enable)
Set the transaction attributes.
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.
static amxd_object_t * test_build_dm(void)
amxd_object_t * test_build_dm2(void)
void test_amxd_get_function_filtered(UNUSED void **state)
void test_amxd_get_function_recursive_singleton(UNUSED void **state)
void test_amxd_get_function_path(UNUSED void **state)
void test_amxd_get_function_with_cb(UNUSED void **state)
void test_amxd_get_function_recursive_template(UNUSED void **state)
void test_amxd_get_function_all(UNUSED void **state)
void test_amxd_get_function_filtered_invalid(UNUSED void **state)