55 #include <sys/resource.h>
56 #include <sys/types.h>
71 #include <amxc/amxc.h>
72 #include <amxp/amxp_signal.h>
73 #include <amxd/amxd_dm.h>
74 #include <amxd/amxd_object.h>
75 #include <amxd/amxd_parameter.h>
76 #include <amxd/amxd_transaction.h>
82 #include <amxc/amxc_macros.h>
86 const char* main_odl =
87 "%define { object MyObject { string Text; } }\n"
88 "%populate { object MyObject { parameter OtherParam = 10; } } ";
101 amxd_object_t*
object = NULL;
102 amxd_param_t* param = NULL;
105 const char* main_odl =
106 "%config { populate-behavior = { unknown-parameter = \"add\" }; }\n"
107 "%define { object MyObject { string Text; object Multi[] { string Text; } } }\n"
108 "%populate { object MyObject { parameter OtherParam = 10; object Multi { parameter Other = 10; } } }\n";
116 object = amxd_dm_findf(&dm,
"MyObject");
117 param = amxd_object_get_param_def(
object,
"OtherParam");
118 assert_ptr_not_equal(param, NULL);
119 assert_int_equal(amxd_param_get_type(param), AMXC_VAR_ID_INT64);
121 assert_int_equal(amxd_object_get_value(int64_t,
object,
"OtherParam", NULL), 10);
128 amxd_object_t*
object = NULL;
129 amxd_param_t* param1 = NULL;
130 amxd_param_t* param2 = NULL;
137 const char* main_odl =
138 "%config { populate-behavior = { unknown-parameter = \"add\" }; }\n"
139 "%define { object MyObject[] { int64 DefParam; } }\n"
140 "%populate { object MyObject { instance add(6,'key1') { parameter DefParam = 66; parameter OtherParam = 10; } } }\n";
148 object = amxd_dm_findf(&dm,
"MyObject.key1");
149 param1 = amxd_object_get_param_def(
object,
"DefParam");
150 param2 = amxd_object_get_param_def(
object,
"OtherParam");
151 assert_ptr_not_equal(param1, NULL);
152 assert_ptr_not_equal(param2, NULL);
153 assert_int_equal(amxd_param_get_type(param1), AMXC_VAR_ID_INT64);
154 assert_int_equal(amxd_param_get_type(param2), AMXC_VAR_ID_INT64);
156 val1 = amxd_object_get_value(int64_t,
object,
"DefParam", &s1);
157 assert_int_equal(s1, amxd_status_ok);
158 assert_int_equal(val1, 66);
160 val2 = amxd_object_get_value(int64_t,
object,
"OtherParam", &s2);
161 assert_int_equal(s2, amxd_status_ok);
162 assert_int_equal(val2, 10);
169 amxd_object_t*
object = NULL;
170 amxd_param_t* param = NULL;
173 const char* main_odl =
174 "%config { populate-behavior = { unknown-parameter = \"warning\" }; }\n"
175 "%define { object MyObject { string Text; } }\n"
176 "%populate { object MyObject { parameter OtherParam = 10; } }\n";
183 object = amxd_dm_findf(&dm,
"MyObject");
184 param = amxd_object_get_param_def(
object,
"OtherParam");
185 assert_ptr_equal(param, NULL);
194 const char* main_odl =
197 " object MyTemplate[] {"
203 " object MyObject.MyTemplate {"
223 amxd_object_t*
object = NULL;
225 const char* main_odl =
226 "%config { populate-behavior = { duplicate-instance = \"update\" }; }\n"
228 " object MyObject {\n"
229 " object MyTemplate[] {\n"
235 " object MyObject.MyTemplate {\n"
236 " instance add(1) { parameter Text = \"Test\"; }\n"
237 " instance add(2);\n"
238 " instance add(1) {\n"
239 " parameter Text = \"HALLO\";\n"
249 object = amxd_dm_findf(&dm,
"MyObject.MyTemplate.1");
250 value = amxd_object_get_value(cstring_t,
object,
"Text", NULL);
251 assert_string_equal(value,
"HALLO");
261 amxd_object_t*
object = NULL;
263 const char* main_odl =
264 "%config { populate-behavior = { duplicate-instance = \"update\" }; }\n"
266 " object MyObject {\n"
267 " object MyTemplate[] {\n"
268 " %key string Text;\n"
274 " object MyObject.MyTemplate {\n"
275 " instance add(Text = \"Value1\") { parameter Number = 666; }\n"
276 " instance add(Text = \"Value2\");\n"
277 " instance add(Text = \"Value1\") {\n"
278 " parameter Number = 1234;\n"
288 object = amxd_dm_findf(&dm,
"MyObject.MyTemplate.1");
289 value = amxd_object_get_value(uint32_t,
object,
"Number", NULL);
290 assert_int_equal(value, 1234);
300 amxd_object_t* templ = NULL;
301 amxd_object_t*
object = NULL;
302 amxd_status_t status;
303 const char* main_odl =
305 " object MyObjectKeyTest {\n"
307 " %key uint32 Key1;\n"
308 " %key uint32 Key2;\n"
319 templ = amxd_dm_findf(&dm,
"MyObjectKeyTest.Node");
320 assert_ptr_not_equal(templ, NULL);
323 amxd_trans_init(&trans);
324 amxd_trans_select_object(&trans, templ);
325 amxd_trans_add_inst(&trans, 1,
"N1");
326 amxd_trans_set_value(uint32_t, &trans,
"Key1", 0);
327 amxd_trans_set_value(uint32_t, &trans,
"Key2", 0);
328 status = amxd_trans_apply(&trans, &dm);
329 assert_int_equal(status, amxd_status_ok);
330 amxd_trans_clean(&trans);
332 object = amxd_object_findf(templ,
"[Key1 == 0].");
333 assert_ptr_not_equal(
object, NULL);
335 amxd_trans_init(&trans);
336 amxd_trans_select_object(&trans, templ);
337 amxd_trans_add_inst(&trans, 2,
"N2");
338 amxd_trans_set_value(uint32_t, &trans,
"Key1", 1);
339 amxd_trans_set_value(uint32_t, &trans,
"Key2", 0);
340 status = amxd_trans_apply(&trans, &dm);
341 assert_int_equal(status, amxd_status_ok);
342 amxd_trans_clean(&trans);
344 object = amxd_object_findf(templ,
"[Key1 == 1].");
345 assert_ptr_not_equal(
object, NULL);
Ambiorix ODL parser header file.
int amxo_parser_parse_string(amxo_parser_t *parser, const char *text, amxd_object_t *object)
Parses a string containing a valid ODL part.
void amxo_parser_clean(amxo_parser_t *parser)
Cleans up the odl parser instance.
static amxd_status_t amxo_parser_get_status(amxo_parser_t *parser)
Get the status of the odl parser.
int amxo_parser_init(amxo_parser_t *parser)
Initializes a new odl parser instance.
The ODL parser structure.
void test_duplicate_instance_can_update(UNUSED void **state)
void test_duplicate_instance_with_keys_can_update(UNUSED void **state)
void test_duplicate_instance_default_behavior(UNUSED void **state)
void test_none_existing_param_can_add(UNUSED void **state)
void test_transactions_with_two_keys(UNUSED void **state)
void test_none_existing_param_default_behavior(UNUSED void **state)
void test_none_existing_instance_param_can_add(UNUSED void **state)
void test_none_existing_param_warning(UNUSED void **state)