55 #include <sys/resource.h>
56 #include <sys/types.h>
71 #include <amxc/amxc.h>
72 #include <amxp/amxp.h>
73 #include <amxp/amxp_signal.h>
74 #include <amxd/amxd_dm.h>
75 #include <amxd/amxd_object.h>
76 #include <amxd/amxd_object_expression.h>
77 #include <amxd/amxd_parameter.h>
83 #include <amxc/amxc_macros.h>
93 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
107 assert_int_equal(amxc_htable_size(&parser.
mibs), 0);
121 assert_int_equal(amxc_htable_size(&parser.
mibs), 4);
124 assert_int_equal(amxc_htable_size(&parser.
mibs), 4);
151 amxc_var_t* mib_dir = NULL;
153 amxc_var_init(&dirs);
154 amxc_var_set_type(&dirs, AMXC_VAR_ID_LIST);
155 amxc_var_add(cstring_t, &dirs,
"./mibs");
156 amxc_var_add(cstring_t, &dirs,
"./mibs/test_mib_valid");
157 amxc_var_add(cstring_t, &dirs,
"./${mib-dir}/test_mib_valid");
163 amxc_var_set(cstring_t, mib_dir,
"mibs");
166 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
168 amxc_var_clean(&dirs);
176 amxc_var_t* dirs = NULL;
182 amxc_var_set_type(dirs, AMXC_VAR_ID_LIST);
183 amxc_var_add(cstring_t, dirs,
"./mibs");
184 amxc_var_add(cstring_t, dirs,
"./mibs/test_mib_valid");
187 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
198 amxc_var_init(&dirs);
206 amxc_var_set_type(&dirs, AMXC_VAR_ID_LIST);
207 amxc_var_add(cstring_t, &dirs,
"");
209 amxc_var_clean(&dirs);
210 amxc_var_set_type(&dirs, AMXC_VAR_ID_LIST);
211 amxc_var_add(uint32_t, &dirs, 123);
214 amxc_var_clean(&dirs);
222 amxd_object_t*
object = NULL;
223 const char*
odl =
"%define { object Test { string MyParam; } }";
229 assert_int_equal(amxc_htable_size(&parser.
mibs), 4);
234 object = amxd_dm_get_object(&dm,
"Test");
235 assert_non_null(
object);
237 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
239 assert_non_null(amxd_object_get_param_def(
object,
"Mib1Text"));
241 assert_true(amxd_object_has_mib(
object,
"test_mib1"));
242 assert_int_equal(amxd_object_remove_mib(
object,
"test_mib1"), 0);
243 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
246 assert_non_null(amxd_object_get_param_def(
object,
"Mib1Text"));
255 amxd_object_t*
object = NULL;
256 const char*
odl =
"%define { object Test { string MyParam; } }";
262 assert_int_equal(amxc_htable_size(&parser.
mibs), 4);
267 object = amxd_dm_get_object(&dm,
"Test");
268 assert_non_null(
object);
279 amxd_object_t*
object = NULL;
280 amxd_object_t* not_in_dm = NULL;
281 const char*
odl =
"%define { object Test { string MyParam; } }";
286 amxd_object_new(¬_in_dm, amxd_object_singleton,
"Test");
289 assert_int_equal(amxc_htable_size(&parser.
mibs), 4);
294 object = amxd_dm_get_object(&dm,
"Test");
295 assert_non_null(
object);
303 amxd_object_delete(¬_in_dm);
311 amxd_object_t*
object = NULL;
313 const char*
odl =
"%define { object Test { string MyParam = 'ADD'; } }";
320 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
325 object = amxd_dm_get_object(&dm,
"Test");
326 assert_non_null(
object);
328 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
329 assert_null(amxd_object_get_param_def(
object,
"Mib3Text"));
330 assert_null(amxd_object_get_param_def(
object,
"Mib6Text"));
332 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
333 assert_non_null(amxd_object_get_param_def(
object,
"Mib3Text"));
334 assert_non_null(amxd_object_get_param_def(
object,
"Mib6Text"));
335 assert_true(amxd_object_has_mib(
object,
"test_mib3"));
336 assert_true(amxd_object_has_mib(
object,
"test_mib6"));
338 amxd_object_set_value(cstring_t,
object,
"MyParam",
"HELLO");
340 assert_false(amxd_object_has_mib(
object,
"test_mib3"));
341 assert_false(amxd_object_has_mib(
object,
"test_mib6"));
342 assert_null(amxd_object_get_param_def(
object,
"Mib3Text"));
343 assert_null(amxd_object_get_param_def(
object,
"Mib6Text"));
352 amxd_object_t*
object = NULL;
354 const char*
odl =
"%define { object Test { string MyParam = 'ADD'; } }";
361 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
366 object = amxd_dm_get_object(&dm,
"Test");
367 assert_non_null(
object);
369 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
370 assert_null(amxd_object_get_param_def(
object,
"Mib3Text"));
371 assert_null(amxd_object_get_param_def(
object,
"Mib6Text"));
373 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
374 assert_non_null(amxd_object_get_param_def(
object,
"Mib3Text"));
375 assert_non_null(amxd_object_get_param_def(
object,
"Mib6Text"));
376 assert_true(amxd_object_has_mib(
object,
"test_mib3"));
377 assert_true(amxd_object_has_mib(
object,
"test_mib6"));
379 amxd_object_set_value(cstring_t,
object,
"MyParam",
"HELLO");
381 assert_non_null(amxd_object_get_param_def(
object,
"Mib3Text"));
382 assert_non_null(amxd_object_get_param_def(
object,
"Mib6Text"));
383 assert_true(amxd_object_has_mib(
object,
"test_mib3"));
384 assert_true(amxd_object_has_mib(
object,
"test_mib6"));
393 amxd_object_t*
object = NULL;
395 const char*
odl =
"%define { object Test { string MyParam = 'ADD'; } }";
402 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
407 object = amxd_dm_get_object(&dm,
"Test");
408 assert_non_null(
object);
410 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
411 assert_null(amxd_object_get_param_def(
object,
"Mib3Text"));
412 assert_null(amxd_object_get_param_def(
object,
"Mib6Text"));
414 assert_null(amxd_object_get_param_def(
object,
"Mib1Text"));
415 assert_non_null(amxd_object_get_param_def(
object,
"Mib3Text"));
416 assert_non_null(amxd_object_get_param_def(
object,
"Mib6Text"));
417 assert_true(amxd_object_has_mib(
object,
"test_mib3"));
418 assert_true(amxd_object_has_mib(
object,
"test_mib6"));
420 amxd_object_set_value(cstring_t,
object,
"MyParam",
"HELLO");
422 assert_null(amxd_object_get_param_def(
object,
"Mib3Text"));
423 assert_null(amxd_object_get_param_def(
object,
"Mib6Text"));
424 assert_false(amxd_object_has_mib(
object,
"test_mib3"));
425 assert_false(amxd_object_has_mib(
object,
"test_mib6"));
434 amxd_object_t*
object = NULL;
436 const char*
odl =
"%define { object Test { string MyParam = 'ADD'; } } "
437 "include \"add_mid.odl\";";
444 assert_int_equal(amxc_htable_size(&parser.
mibs), 5);
449 object = amxd_dm_get_object(&dm,
"Test");
450 assert_non_null(
object);
452 assert_true(amxd_object_has_mib(
object,
"test_mib1"));
453 assert_non_null(amxd_object_get_param_def(
object,
"Mib1Text"));
Ambiorix ODL parser header file.
amxc_var_t * amxo_parser_claim_config(amxo_parser_t *parser, const char *path)
Gets or creates a configuration option.
int amxo_parser_remove_mibs(amxo_parser_t *parser, amxd_object_t *object, amxo_evaluate_expr_fn_t fn)
Removes zero, one or more MIBs from a data model object.
int amxo_parser_scan_mib_dir(amxo_parser_t *parser, const char *path)
Scans a directory for MIB odl files.
int amxo_parser_scan_mib_dirs(amxo_parser_t *parser, amxc_var_t *dirs)
Scans multiple directories for MIB odl files.
int amxo_parser_apply_mibs(amxo_parser_t *parser, amxd_object_t *object, amxo_evaluate_expr_fn_t fn)
Applies zero, one or more MIBs to a data model object.
int amxo_parser_apply_mib(amxo_parser_t *parser, amxd_object_t *object, const char *mib_name)
Unconditionally applies a MIB to a data model object.
int amxo_parser_add_mibs(amxo_parser_t *parser, amxd_object_t *object, amxo_evaluate_expr_fn_t fn)
Adds zero, one or more MIBs to a data model object.
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_apply_fails_with_invalid_arguments(UNUSED void **state)
void test_can_apply_mib_to_object(UNUSED void **state)
void test_can_add_mibs_to_object(UNUSED void **state)
void test_can_add_mibs_from_include(UNUSED void **state)
void test_scan_mib_dir_fails_when_invalid_expr(UNUSED void **state)
void test_scan_mib_dir_fails_with_invalid_arguments(UNUSED void **state)
void test_can_apply_mibs_to_object(UNUSED void **state)
void test_scan_mib_dirs_fails_with_invalid_arguments(UNUSED void **state)
void test_can_scan_mib_dirs(UNUSED void **state)
void test_can_scan_mib_dirs_using_config(UNUSED void **state)
void test_scan_mib_dir_skips_mib_when_already_known(UNUSED void **state)
void test_can_remove_mibs_from_object(UNUSED void **state)
void test_apply_unknown_mib_fails(UNUSED void **state)
void test_can_scan_mib_dir(UNUSED void **state)