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_object_event.h>
76 #include <amxd/amxd_parameter.h>
81 #include <amxc/amxc_macros.h>
84 assert_ptr_not_equal(option, NULL);
85 assert_int_equal(amxc_var_type_of(option), AMXC_VAR_ID_INT64);
88 assert_ptr_not_equal(option, NULL);
89 assert_int_equal(amxc_var_type_of(option), AMXC_VAR_ID_CSTRING);
92 assert_ptr_not_equal(option, NULL);
93 assert_int_equal(amxc_var_type_of(option), AMXC_VAR_ID_BOOL);
97 amxd_object_t* root = amxd_dm_get_root(dm);
98 static const char* paths[] = {
100 "TestObjectRoot.TestObjectSingelton",
101 "TestObjectRoot.TestObjSingletonAttr",
102 "TestObjectRoot.TestObjectTemplate",
103 "TestObjectRoot.TestObjTemplateAttr",
104 "TestObjectRoot.TestObjectParamTypes",
105 "TestObjectRoot.TestObjectFunctions",
106 "TestObjectRoot.TestSingeltonParamAttr",
107 "TestObjectRoot.TestTemplateParamAttr.99",
108 "TestObjectRoot.TestTemplateParamAttr.100",
109 "TestObjectRoot.TestSingletonFuncAttr",
110 "TestObjectRoot.TestTemplateFuncAttr",
111 "TestObjectRoot.TestObjectTemplateWithChild",
112 "TestObjectRoot.TestObjectTemplateWithChild.TemplateChildObject",
113 "TestObjectRoot.TestObjectTemplateWithChild.Name1",
114 "TestObjectRoot.TestObjectTemplateWithChild.Name1.TemplateChildObject",
115 "TestObjectRoot.TestObjectTemplateWithChild.Name2",
116 "TestObjectRoot.TestObjectTemplateWithChild.Name2.MibObject",
117 "TestObjectRoot.TestObjectTemplateWithChild.Name2.TemplateChildObject",
118 "TestObjectRoot.ExtendWithTestMib",
119 "TestObjectRoot.ExtendWithTestMib.MibObject",
123 for(
int i = 0; paths[i] != NULL; i++) {
124 printf(
"Checking %s exists\n", paths[i]);
125 assert_ptr_not_equal(amxd_object_findf(root, paths[i]), NULL);
130 amxd_object_t* root = amxd_dm_get_root(dm);
131 amxd_object_t*
object = NULL;
132 amxd_param_t* param = NULL;
133 static const char* types_params[] = {
150 object = amxd_object_findf(root,
"TestObjectRoot.TestObjectParamTypes");
151 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_protected), 13);
152 for(
int i = 0; types_params[i] != NULL; i++) {
153 assert_ptr_not_equal(amxd_object_get_param_def(
object, types_params[i]), NULL);
156 object = amxd_object_findf(root,
"TestObjectRoot.TestSingeltonParamAttr");
157 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_private), 1);
158 param = amxd_object_get_param_def(
object,
"Param1");
159 assert_ptr_not_equal(param, NULL);
160 assert_true(amxd_param_is_attr_set(param, amxd_pattr_private));
161 assert_true(amxd_param_is_attr_set(param, amxd_pattr_read_only));
162 assert_true(amxd_param_is_attr_set(param, amxd_pattr_variable));
163 assert_true(amxd_param_is_attr_set(param, amxd_pattr_instance));
164 assert_true(amxd_param_is_attr_set(param, amxd_pattr_template));
166 object = amxd_object_findf(root,
"TestObjectRoot.TestTemplateParamAttr");
167 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_private), 3);
168 param = amxd_object_get_param_def(
object,
"Param1");
169 assert_ptr_not_equal(param, NULL);
170 assert_true(amxd_param_is_attr_set(param, amxd_pattr_private));
171 assert_true(amxd_param_is_attr_set(param, amxd_pattr_read_only));
172 assert_true(amxd_param_is_attr_set(param, amxd_pattr_variable));
173 assert_true(amxd_param_is_attr_set(param, amxd_pattr_instance));
174 assert_true(amxd_param_is_attr_set(param, amxd_pattr_template));
175 param = amxd_object_get_param_def(
object,
"Param2");
176 assert_ptr_not_equal(param, NULL);
177 assert_false(amxd_param_is_attr_set(param, amxd_pattr_private));
178 assert_false(amxd_param_is_attr_set(param, amxd_pattr_read_only));
179 assert_false(amxd_param_is_attr_set(param, amxd_pattr_variable));
180 assert_false(amxd_param_is_attr_set(param, amxd_pattr_instance));
181 assert_true(amxd_param_is_attr_set(param, amxd_pattr_template));
182 param = amxd_object_get_param_def(
object,
"Param3");
183 assert_ptr_not_equal(param, NULL);
184 assert_false(amxd_param_is_attr_set(param, amxd_pattr_private));
185 assert_false(amxd_param_is_attr_set(param, amxd_pattr_read_only));
186 assert_false(amxd_param_is_attr_set(param, amxd_pattr_variable));
187 assert_true(amxd_param_is_attr_set(param, amxd_pattr_instance));
188 assert_false(amxd_param_is_attr_set(param, amxd_pattr_template));
190 object = amxd_object_findf(root,
"TestObjectRoot");
191 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_private), 2);
192 param = amxd_object_get_param_def(
object,
"TestObjectTemplateWithChildCounter");
193 assert_ptr_not_equal(param, NULL);
194 object = amxd_object_findf(root,
"TestObjectRoot.TestObjectTemplateWithChild.TemplateChildObject");
195 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_private), 1);
196 param = amxd_object_get_param_def(
object,
"Param1");
197 assert_ptr_not_equal(param, NULL);
198 object = amxd_object_findf(root,
"TestObjectRoot.TestObjectTemplateWithChild.1.TemplateChildObject");
199 assert_int_equal(amxd_object_get_param_count(
object, amxd_dm_access_private), 1);
200 param = amxd_object_get_param_def(
object,
"Param1");
201 assert_ptr_not_equal(param, NULL);
203 object = amxd_object_findf(root,
"TestObjectRoot.TestObjectTemplateWithKeys.1.");
204 param = amxd_object_get_param_def(
object,
"KeyPart1");
205 assert_true(amxd_param_is_attr_set(param, amxd_pattr_key));
206 assert_false(amxd_param_is_attr_set(param, amxd_pattr_mutable));
207 param = amxd_object_get_param_def(
object,
"KeyPart2");
208 assert_true(amxd_param_is_attr_set(param, amxd_pattr_key));
209 assert_true(amxd_param_is_attr_set(param, amxd_pattr_mutable));
213 amxd_object_t* root = amxd_dm_get_root(dm);
214 amxd_object_t*
object = NULL;
215 amxd_function_t* func = NULL;
216 static const char* obj_funcs[] = {
236 object = amxd_object_findf(root,
"TestObjectRoot.TestObjectFunctions");
237 assert_int_equal(amxd_object_get_function_count(
object, amxd_dm_access_private), 25);
238 for(
int i = 0; obj_funcs[i] != NULL; i++) {
239 assert_ptr_not_equal(amxd_object_get_function(
object, obj_funcs[i]), NULL);
242 object = amxd_object_findf(root,
"TestObjectRoot.TestSingletonFuncAttr");
243 assert_int_equal(amxd_object_get_function_count(
object, amxd_dm_access_private), 11);
244 func = amxd_object_get_function(
object,
"TestFunc1");
245 assert_true(amxd_function_is_attr_set(func, amxd_fattr_template));
246 assert_true(amxd_function_is_attr_set(func, amxd_fattr_instance));
247 assert_true(amxd_function_is_attr_set(func, amxd_fattr_private));
249 func = amxd_object_get_function(
object,
"TestFunc2");
250 assert_false(amxd_function_is_attr_set(func, amxd_fattr_template));
251 assert_false(amxd_function_is_attr_set(func, amxd_fattr_instance));
252 assert_false(amxd_function_is_attr_set(func, amxd_fattr_private));
256 amxd_object_t*
object = amxd_dm_findf(dm,
"TestObjectRoot.ExtendWithTestMib");
258 assert_ptr_not_equal(
object, NULL);
259 assert_true(amxd_object_has_mib(
object,
"TestMib"));
260 assert_ptr_not_equal(amxd_object_get_param_def(
object,
"mibparam"), NULL);
261 assert_ptr_not_equal(amxd_object_get_function(
object,
"mibfunc"), NULL);
266 amxc_var_t* lib_dirs = NULL;
273 amxc_var_add(cstring_t, lib_dirs,
"../test_plugin/");
274 amxc_var_dump(&parser.
config, STDOUT_FILENO);
292 amxc_var_t* lib_dirs = NULL;
294 amxc_var_t* odl_resolve = NULL;
301 amxc_var_set(
bool, odl_resolve,
false);
303 amxc_var_add(cstring_t, lib_dirs,
"../test_plugin/");
304 amxc_var_dump(&parser.
config, STDOUT_FILENO);
338 amxc_var_t* lib_dirs = NULL;
339 int fd = open(
"test_valid.odl", O_RDONLY);
345 amxc_var_add(cstring_t, lib_dirs,
"../test_plugin/");
346 amxc_var_dump(&parser.
config, STDOUT_FILENO);
369 assert_int_equal(
amxo_parser_parse_string(&parser,
"%config {} %define{} %populate { } %config { }", amxd_dm_get_root(&dm)), 0);
381 const char*
odl =
"%define { object Test { void F1(); void F2(); void F1(); } }";
396 amxd_object_t* obj = NULL;
398 amxc_var_t* lib_dirs = NULL;
405 amxc_var_add(cstring_t, lib_dirs,
"../test_plugin/");
406 amxc_var_dump(&parser.
config, STDOUT_FILENO);
411 obj = amxd_dm_findf(&dm,
"TestObjectRoot.TestObjectEvent.");
412 assert_non_null(obj);
413 assert_int_equal(amxd_object_describe_events(obj, &
events, amxd_dm_access_protected), 0);
414 assert_non_null(GETP_ARG(&
events,
"0"));
Ambiorix ODL parser header file.
amxc_var_t * amxo_parser_get_config(amxo_parser_t *parser, const char *path)
Gets a configuration option.
amxc_var_t * amxo_parser_claim_config(amxo_parser_t *parser, const char *path)
Gets or creates a configuration option.
int amxo_parser_parse_fd(amxo_parser_t *parser, int fd, amxd_object_t *object)
Parses an odl 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.
int amxo_parser_parse_file(amxo_parser_t *parser, const char *file_path, amxd_object_t *object)
Parses an odl file.
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.
void amxo_resolver_import_close_all(void)
Unloads all loaded shared objects.
The ODL parser structure.
void test_can_parse_string(UNUSED void **state)
void test_object_has_event(UNUSED void **state)
void test_duplicate_func_name(UNUSED void **state)
static void check_functions_exist(amxd_dm_t *dm)
void test_can_parse_empty_file(UNUSED void **state)
static void check_options_are_available(amxo_parser_t *parser)
void test_can_parse_odl_file_no_resolve(UNUSED void **state)
static void check_objects_exist(amxd_dm_t *dm)
static void check_parameters_exist(amxd_dm_t *dm)
void test_can_parse_odl_file(UNUSED void **state)
static void check_mib_extions_work(amxd_dm_t *dm)
void test_can_parse_fd(UNUSED void **state)