libamxo  4.3.4
Object Definition Language (ODL) parsing
test_invalid_odl.c File Reference
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <inttypes.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <cmocka.h>
#include <amxc/amxc.h>
#include <amxp/amxp_signal.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_parameter.h>
#include <amxo/amxo.h>
#include "test_invalid_odl.h"
#include <amxc/amxc_macros.h>

Go to the source code of this file.

Functions

static amxd_status_t test_dummy_action (UNUSED amxd_object_t *const object, UNUSED amxd_param_t *const param, UNUSED amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, UNUSED void *priv)
 
static void _print_event (const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
void test_invalid_object_attrs (UNUSED void **state)
 
void test_invalid_param_attrs (UNUSED void **state)
 
void test_invalid_func_attrs (UNUSED void **state)
 
void test_add_inst_on_singelton (UNUSED void **state)
 
void test_duplicate_inst_index (UNUSED void **state)
 
void test_duplicate_inst_name (UNUSED void **state)
 
void test_invalid_inst_name (UNUSED void **state)
 
void test_instance_of_singleton (UNUSED void **state)
 
void test_duplicate_obj_name (UNUSED void **state)
 
void test_invalid_obj_name (UNUSED void **state)
 
void test_duplicate_param_name (UNUSED void **state)
 
void test_duplicate_param_name_with_counter (UNUSED void **state)
 
void test_invalid_param_name (UNUSED void **state)
 
void test_invalid_func_name (UNUSED void **state)
 
void test_duplicate_func_arg_name (UNUSED void **state)
 
void test_select_none_existing_obj (UNUSED void **state)
 
void test_select_none_existing_param (UNUSED void **state)
 
void test_invalid_param_value (UNUSED void **state)
 
void test_invalid_param_value_validate (UNUSED void **state)
 
void test_invalid_action_name (UNUSED void **state)
 
void test_invalid_object_action_name (UNUSED void **state)
 
void test_invalid_resolvers (UNUSED void **state)
 
void test_not_existing_entry_point (UNUSED void **state)
 
void test_invalid_parameter_actions (UNUSED void **state)
 
void test_not_resolved_action (UNUSED void **state)
 
void test_add_not_existing_mib (UNUSED void **state)
 
void test_add_mib_with_duplicates (UNUSED void **state)
 
void test_invalid_regexp_in_filter (UNUSED void **state)
 
void test_invalid_key_params (UNUSED void **state)
 
void test_empty_file_name (UNUSED void **state)
 
void test_parse_non_existing_file (UNUSED void **state)
 

Function Documentation

◆ _print_event()

static void _print_event ( const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 90 of file test_invalid_odl.c.

92  {
93 
94  printf("Event received %s\n", sig_name);
95 }

◆ test_add_inst_on_singelton()

void test_add_inst_on_singelton ( UNUSED void **  state)

Definition at line 175 of file test_invalid_odl.c.

175  {
176  amxd_dm_t dm;
177  amxo_parser_t parser;
178  const char* odl =
179  "%define { object Test; }" \
180  "%populate { object Test { instance add(0,\"\"); } }";
181 
182  amxd_dm_init(&dm);
183  amxo_parser_init(&parser);
184 
185  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
186  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_type);
187 
188  amxo_parser_clean(&parser);
189  amxd_dm_clean(&dm);
190 }
include test_include odl
Definition: test_valid.odl:66
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.
Definition: amxo.h:414
int amxo_parser_init(amxo_parser_t *parser)
Initializes a new odl parser instance.
The ODL parser structure.
Definition: amxo_types.h:245

◆ test_add_mib_with_duplicates()

void test_add_mib_with_duplicates ( UNUSED void **  state)

Definition at line 600 of file test_invalid_odl.c.

600  {
601  amxd_dm_t dm;
602  amxo_parser_t parser;
603  const char* odls[] = {
604  "%define { mib TestMib { string Text; } object Test { string Text; extend with mib TestMib; } }",
605  "%define { mib TestMib { string Text; } object Test { extend with mib TestMib; string Text; } }",
606  NULL
607  };
608 
609  amxd_dm_init(&dm);
610  amxo_parser_init(&parser);
611 
612  for(int i = 0; odls[i] != NULL; i++) {
613  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
614  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
615  amxd_dm_clean(&dm);
616  }
617 
618  amxo_parser_clean(&parser);
619  amxd_dm_clean(&dm);
620 }

◆ test_add_not_existing_mib()

void test_add_not_existing_mib ( UNUSED void **  state)

Definition at line 579 of file test_invalid_odl.c.

579  {
580  amxd_dm_t dm;
581  amxo_parser_t parser;
582  const char* odls[] = {
583  "%define { object Test { extend with mib FakeMib; } }",
584  NULL
585  };
586 
587  amxd_dm_init(&dm);
588  amxo_parser_init(&parser);
589 
590  for(int i = 0; odls[i] != NULL; i++) {
591  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
592  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_object_not_found);
593  amxd_dm_clean(&dm);
594  }
595 
596  amxo_parser_clean(&parser);
597  amxd_dm_clean(&dm);
598 }

◆ test_dummy_action()

static amxd_status_t test_dummy_action ( UNUSED amxd_object_t *const  object,
UNUSED amxd_param_t *const  param,
UNUSED amxd_action_t  reason,
UNUSED const amxc_var_t *const  args,
UNUSED amxc_var_t *const  retval,
UNUSED void *  priv 
)
static

Definition at line 81 of file test_invalid_odl.c.

86  {
87  return amxd_status_ok;
88 }

◆ test_duplicate_func_arg_name()

void test_duplicate_func_arg_name ( UNUSED void **  state)

Definition at line 350 of file test_invalid_odl.c.

350  {
351  amxd_dm_t dm;
352  amxo_parser_t parser;
353  const char* odl = "%define { object Test { void F1(bool a1, bool a2, bool a1); } }";
354 
355  amxd_dm_init(&dm);
356  amxo_parser_init(&parser);
357 
358  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
359  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
360 
361  amxo_parser_clean(&parser);
362  amxd_dm_clean(&dm);
363 }

◆ test_duplicate_inst_index()

void test_duplicate_inst_index ( UNUSED void **  state)

Definition at line 192 of file test_invalid_odl.c.

192  {
193  amxd_dm_t dm;
194  amxo_parser_t parser;
195  const char* odl =
196  "%define { object Test[]; }" \
197  "%populate { object Test { instance add(1,\"\"); instance add(1,\"\"); } }";
198 
199  amxd_dm_init(&dm);
200  amxo_parser_init(&parser);
201 
202  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
203  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
204 
205  amxo_parser_clean(&parser);
206  amxd_dm_clean(&dm);
207 }

◆ test_duplicate_inst_name()

void test_duplicate_inst_name ( UNUSED void **  state)

Definition at line 209 of file test_invalid_odl.c.

209  {
210  amxd_dm_t dm;
211  amxo_parser_t parser;
212  const char* odl =
213  "%define { object Test[]; }" \
214  "%populate { object Test { instance add(0,\"AB\"); instance add(0,\"AB\"); } }";
215 
216  amxd_dm_init(&dm);
217  amxo_parser_init(&parser);
218 
219  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
220  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
221 
222  amxo_parser_clean(&parser);
223  amxd_dm_clean(&dm);
224 }

◆ test_duplicate_obj_name()

void test_duplicate_obj_name ( UNUSED void **  state)

Definition at line 260 of file test_invalid_odl.c.

260  {
261  amxd_dm_t dm;
262  amxo_parser_t parser;
263  const char* odl = "%define { object Test1; object Test2; object Test1; }";
264 
265  amxd_dm_init(&dm);
266  amxo_parser_init(&parser);
267 
268  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
269  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
270 
271  amxo_parser_clean(&parser);
272  amxd_dm_clean(&dm);
273 }

◆ test_duplicate_param_name()

void test_duplicate_param_name ( UNUSED void **  state)

Definition at line 290 of file test_invalid_odl.c.

290  {
291  amxd_dm_t dm;
292  amxo_parser_t parser;
293  const char* odl = "%define { object Test { string P1; string P2; string P1; } }";
294 
295  amxd_dm_init(&dm);
296  amxo_parser_init(&parser);
297 
298  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
299  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
300 
301  amxo_parser_clean(&parser);
302  amxd_dm_clean(&dm);
303 }

◆ test_duplicate_param_name_with_counter()

void test_duplicate_param_name_with_counter ( UNUSED void **  state)

Definition at line 305 of file test_invalid_odl.c.

305  {
306  amxd_dm_t dm;
307  amxo_parser_t parser;
308  const char* odl = "%define { object Test { string P1; object TT[] { counted with P1; } } }";
309 
310  amxd_dm_init(&dm);
311  amxo_parser_init(&parser);
312 
313  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
314  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
315 
316  amxo_parser_clean(&parser);
317  amxd_dm_clean(&dm);
318 }

◆ test_empty_file_name()

void test_empty_file_name ( UNUSED void **  state)

Definition at line 734 of file test_invalid_odl.c.

734  {
735  amxd_dm_t dm;
736  amxo_parser_t parser;
737 
738  amxd_dm_init(&dm);
739  amxo_parser_init(&parser);
740 
741  assert_int_not_equal(amxo_parser_parse_file(&parser, "", amxd_dm_get_root(&dm)), 0);
742 
743  amxo_parser_clean(&parser);
744  amxd_dm_clean(&dm);
745 }
int amxo_parser_parse_file(amxo_parser_t *parser, const char *file_path, amxd_object_t *object)
Parses an odl file.

◆ test_instance_of_singleton()

void test_instance_of_singleton ( UNUSED void **  state)

Definition at line 243 of file test_invalid_odl.c.

243  {
244  amxd_dm_t dm;
245  amxo_parser_t parser;
246  const char* odl =
247  "%define { object Test; }" \
248  "%populate { object Test { instance add(0,\"Text\"); instance add(0,\"AB\"); } }";
249 
250  amxd_dm_init(&dm);
251  amxo_parser_init(&parser);
252 
253  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
254  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_type);
255 
256  amxo_parser_clean(&parser);
257  amxd_dm_clean(&dm);
258 }

◆ test_invalid_action_name()

void test_invalid_action_name ( UNUSED void **  state)

Definition at line 438 of file test_invalid_odl.c.

438  {
439  amxd_dm_t dm;
440  amxo_parser_t parser;
441  const char* odl =
442  "%define {"
443  " object Test {"
444  " uint32 P1 {"
445  " default 50;"
446  " on action reset call dummy;"
447  " }"
448  " }"
449  "}";
450 
451  amxd_dm_init(&dm);
452  amxo_parser_init(&parser);
453 
455 
456  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
457  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_action);
458 
459  amxo_parser_clean(&parser);
460  amxd_dm_clean(&dm);
461 }
int amxo_resolver_ftab_add(amxo_parser_t *parser, const char *fn_name, amxo_fn_ptr_t fn)
Adds a C function to the function table.
#define AMXO_FUNC(x)
Function ponter caster macro.
Definition: amxo_types.h:80
static amxd_status_t test_dummy_action(UNUSED amxd_object_t *const object, UNUSED amxd_param_t *const param, UNUSED amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, UNUSED void *priv)

◆ test_invalid_func_attrs()

void test_invalid_func_attrs ( UNUSED void **  state)

Definition at line 148 of file test_invalid_odl.c.

148  {
149  amxd_dm_t dm;
150  amxo_parser_t parser;
151  const char* odls[] = {
152  "%define { object Test { %read-only void Func(); } }",
153  "%define { object Test { %persistent void Func(); } }",
154  "%define { object Test { %in void Func(); } }",
155  "%define { object Test { %out void Func(); } }",
156  "%define { object Test { %mandatory void Func(); } }",
157  "%define { object Test { %strict void Func(); } }",
158  "%define { object Test { %volatile void Func(); } }",
159  NULL
160  };
161 
162  amxd_dm_init(&dm);
163  amxo_parser_init(&parser);
164 
165  for(int i = 0; odls[i] != NULL; i++) {
166  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
167  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_attr);
168  amxd_dm_clean(&dm);
169  }
170 
171  amxo_parser_clean(&parser);
172  amxd_dm_clean(&dm);
173 }

◆ test_invalid_func_name()

void test_invalid_func_name ( UNUSED void **  state)

Definition at line 335 of file test_invalid_odl.c.

335  {
336  amxd_dm_t dm;
337  amxo_parser_t parser;
338  const char* odl = "%define { object Test { void \"F$1\"(); } }";
339 
340  amxd_dm_init(&dm);
341  amxo_parser_init(&parser);
342 
343  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
344  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
345 
346  amxo_parser_clean(&parser);
347  amxd_dm_clean(&dm);
348 }

◆ test_invalid_inst_name()

void test_invalid_inst_name ( UNUSED void **  state)

Definition at line 226 of file test_invalid_odl.c.

226  {
227  amxd_dm_t dm;
228  amxo_parser_t parser;
229  const char* odl =
230  "%define { object Test[]; }" \
231  "%populate { object Test { instance add(0,\"%Text$\"); instance add(0,\"AB\"); } }";
232 
233  amxd_dm_init(&dm);
234  amxo_parser_init(&parser);
235 
236  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
237  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
238 
239  amxo_parser_clean(&parser);
240  amxd_dm_clean(&dm);
241 }

◆ test_invalid_key_params()

void test_invalid_key_params ( UNUSED void **  state)

Definition at line 646 of file test_invalid_odl.c.

646  {
647  amxd_dm_t dm;
648  amxo_parser_t parser;
649 
650  const char* odl_1 =
651  "%define {\n"
652  " object TestRoot {\n"
653  " object Test[] {\n"
654  " %key string text;\n"
655  " }\n"
656  " }\n"
657  "}\n"
658  "%populate {\n"
659  " object TestRoot.Test {\n"
660  " instance add();\n"
661  " }\n"
662  "}\n";
663 
664  const char* odl_2 =
665  "%define {\n"
666  " object TestRoot {\n"
667  " object Test[] {\n"
668  " %key string text;\n"
669  " }\n"
670  " }\n"
671  "}\n"
672  "%populate {\n"
673  " object TestRoot.Test {\n"
674  " instance add() {\n"
675  " parameter text = \"KeyValue\";\n"
676  " }\n"
677  " }\n"
678  "}\n";
679 
680  const char* odl_3 =
681  "%define {\n"
682  " object TestRoot {\n"
683  " object Test[] {\n"
684  " %key string text;\n"
685  " }\n"
686  " }\n"
687  "}\n"
688  "%populate {\n"
689  " object TestRoot.Test {\n"
690  " instance add(text = \"key1\");\n"
691  " instance add(text = \"key1\");\n"
692  " }\n"
693  "}\n";
694 
695  const char* odl_4 =
696  "%define {\n"
697  " object TestRoot {\n"
698  " object Test[] {\n"
699  " %key string text = \"Hallo\";\n"
700  " }\n"
701  " }\n"
702  "}\n";
703 
704  amxd_dm_init(&dm);
705  amxo_parser_init(&parser);
706 
707  printf("%s\n", odl_1);
708  fflush(stdout);
709  assert_int_not_equal(amxo_parser_parse_string(&parser, odl_1, amxd_dm_get_root(&dm)), 0);
710  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_missing_key);
711  amxd_dm_clean(&dm);
712 
713  printf("%s\n", odl_2);
714  fflush(stdout);
715  assert_int_not_equal(amxo_parser_parse_string(&parser, odl_2, amxd_dm_get_root(&dm)), 0);
716  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_missing_key);
717  amxd_dm_clean(&dm);
718 
719  printf("%s\n", odl_3);
720  fflush(stdout);
721  assert_int_not_equal(amxo_parser_parse_string(&parser, odl_3, amxd_dm_get_root(&dm)), 0);
722  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_duplicate);
723  amxd_dm_clean(&dm);
724 
725  printf("%s\n", odl_4);
726  fflush(stdout);
727  assert_int_not_equal(amxo_parser_parse_string(&parser, odl_4, amxd_dm_get_root(&dm)), 0);
728  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_value);
729  amxd_dm_clean(&dm);
730 
731  amxo_parser_clean(&parser);
732 }

◆ test_invalid_obj_name()

void test_invalid_obj_name ( UNUSED void **  state)

Definition at line 275 of file test_invalid_odl.c.

275  {
276  amxd_dm_t dm;
277  amxo_parser_t parser;
278  const char* odl = "%define { object \"23&Test1\"; }";
279 
280  amxd_dm_init(&dm);
281  amxo_parser_init(&parser);
282 
283  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
284  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
285 
286  amxo_parser_clean(&parser);
287  amxd_dm_clean(&dm);
288 }

◆ test_invalid_object_action_name()

void test_invalid_object_action_name ( UNUSED void **  state)

Definition at line 463 of file test_invalid_odl.c.

463  {
464  amxd_dm_t dm;
465  amxo_parser_t parser;
466  const char* odl =
467  "%define {"
468  " object Test {"
469  " on action reset call dummy;"
470  " }"
471  "}";
472 
473  amxd_dm_init(&dm);
474  amxo_parser_init(&parser);
475 
477 
478  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
479  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_action);
480 
481  amxo_parser_clean(&parser);
482  amxd_dm_clean(&dm);
483 }

◆ test_invalid_object_attrs()

void test_invalid_object_attrs ( UNUSED void **  state)

Definition at line 97 of file test_invalid_odl.c.

97  {
98  amxd_dm_t dm;
99  amxo_parser_t parser;
100  const char* odls[] = {
101  "%define { %in object Test; }",
102  "%define { %out object Test; }",
103  "%define { %mandatory object Test; }",
104  "%define { %strict object Test; }",
105  "%define { %volatile object Test; }",
106  "%define { %template object Test; }",
107  "%define { %instance object Test; }",
108  NULL
109  };
110 
111  amxd_dm_init(&dm);
112  amxo_parser_init(&parser);
113 
114  for(int i = 0; odls[i] != NULL; i++) {
115  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
116  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_attr);
117  amxd_dm_clean(&dm);
118  }
119 
120  amxo_parser_clean(&parser);
121  amxd_dm_clean(&dm);
122 }

◆ test_invalid_param_attrs()

void test_invalid_param_attrs ( UNUSED void **  state)

Definition at line 124 of file test_invalid_odl.c.

124  {
125  amxd_dm_t dm;
126  amxo_parser_t parser;
127  const char* odls[] = {
128  "%define { object Test { %in string Param; } }",
129  "%define { object Test { %out string Param; } }",
130  "%define { object Test { %mandatory string Param; } }",
131  "%define { object Test { %strict string Param; } }",
132  NULL
133  };
134 
135  amxd_dm_init(&dm);
136  amxo_parser_init(&parser);
137 
138  for(int i = 0; odls[i] != NULL; i++) {
139  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
140  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_attr);
141  amxd_dm_clean(&dm);
142  }
143 
144  amxo_parser_clean(&parser);
145  amxd_dm_clean(&dm);
146 }

◆ test_invalid_param_name()

void test_invalid_param_name ( UNUSED void **  state)

Definition at line 320 of file test_invalid_odl.c.

320  {
321  amxd_dm_t dm;
322  amxo_parser_t parser;
323  const char* odl = "%define { object Test { string \"12$P1\"; } }";
324 
325  amxd_dm_init(&dm);
326  amxo_parser_init(&parser);
327 
328  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
329  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
330 
331  amxo_parser_clean(&parser);
332  amxd_dm_clean(&dm);
333 }

◆ test_invalid_param_value()

void test_invalid_param_value ( UNUSED void **  state)

Definition at line 395 of file test_invalid_odl.c.

395  {
396  amxd_dm_t dm;
397  amxo_parser_t parser;
398  const char* odl = "%define { object Test { bool P1;} } %populate { object Test { parameter P1 = \"text\"; } }";
399  const char* odl2 = "%define { object Test { string P1;} } %populate { object Test { parameter P1 = [ 1, 2, 3 ]; } }";
400 
401  amxd_dm_init(&dm);
402  amxo_parser_init(&parser);
403 
404  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
405  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_value);
406  amxd_dm_clean(&dm);
407 
408  assert_int_not_equal(amxo_parser_parse_string(&parser, odl2, amxd_dm_get_root(&dm)), 0);
409  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_value);
410 
411  amxo_parser_clean(&parser);
412  amxd_dm_clean(&dm);
413 }

◆ test_invalid_param_value_validate()

void test_invalid_param_value_validate ( UNUSED void **  state)

Definition at line 415 of file test_invalid_odl.c.

415  {
416  amxd_dm_t dm;
417  amxo_parser_t parser;
418  const char* odl =
419  "%define {"
420  " object Test {"
421  " uint32 P1 {"
422  " default 50;"
423  " on action validate call check_maximum 10;"
424  " }"
425  " }"
426  "}";
427 
428  amxd_dm_init(&dm);
429  amxo_parser_init(&parser);
430 
431  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
432  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_value);
433 
434  amxo_parser_clean(&parser);
435  amxd_dm_clean(&dm);
436 }

◆ test_invalid_parameter_actions()

void test_invalid_parameter_actions ( UNUSED void **  state)

Definition at line 531 of file test_invalid_odl.c.

531  {
532  amxd_dm_t dm;
533  amxo_parser_t parser;
534  const char* odls[] = {
535  "%define { object Test { string Text { on action \"list\" call dummy; } } }",
536  "%define { object Test { string Text { on action add-inst call dummy; } } }",
537  "%define { object Test { string Text { on action del-inst call dummy; } } }",
538  NULL
539  };
540 
541  amxd_dm_init(&dm);
542  amxo_parser_init(&parser);
543 
545 
546  for(int i = 0; odls[i] != NULL; i++) {
547  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
548  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_action);
549  amxd_dm_clean(&dm);
550  }
551 
552  amxo_parser_clean(&parser);
553  amxd_dm_clean(&dm);
554 }

◆ test_invalid_regexp_in_filter()

void test_invalid_regexp_in_filter ( UNUSED void **  state)

Definition at line 622 of file test_invalid_odl.c.

622  {
623  amxd_dm_t dm;
624  amxo_parser_t parser;
625 
626  const char* odl =
627  "%define {\n"
628  " object Test { string text = \"Hallo\"; }\n"
629  "}\n"
630  "%populate {\n"
631  " on event \".*\" call print_event \n"
632  " filter \'object matches \"[(adsads[\"';\n"
633  "}\n";
634 
635  amxd_dm_init(&dm);
636  amxo_parser_init(&parser);
637 
638  amxo_resolver_ftab_add(&parser, "print_event", AMXO_FUNC(_print_event));
639  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
640  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_value);
641 
642  amxo_parser_clean(&parser);
643  amxd_dm_clean(&dm);
644 }
static void _print_event(const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)

◆ test_invalid_resolvers()

void test_invalid_resolvers ( UNUSED void **  state)

Definition at line 485 of file test_invalid_odl.c.

485  {
486  amxd_dm_t dm;
487  amxo_parser_t parser;
488  const char* odls[] = {
489  "%define { object Test { void test()<!!>;} }",
490  "%define { object Test { void test()<!:!>;} }",
491  "%define { object Test { void test()<!:echo!>;} }",
492  "%define { object Test { void test()<!invalid:echo!>;} }",
493  "%define { object Test { void test()<!more!>;} }",
494  NULL
495  };
496 
497  amxd_dm_init(&dm);
498  amxo_parser_init(&parser);
499 
500  for(int i = 0; odls[i] != NULL; i++) {
501  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
502  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_invalid_name);
503  amxd_dm_clean(&dm);
504  }
505 
506  amxo_parser_clean(&parser);
507  amxd_dm_clean(&dm);
508 }

◆ test_not_existing_entry_point()

void test_not_existing_entry_point ( UNUSED void **  state)

Definition at line 510 of file test_invalid_odl.c.

510  {
511  amxd_dm_t dm;
512  amxo_parser_t parser;
513  const char* odls[] = {
514  " import \"../test_plugin/test_plugin.so\" as test_plugin; %define { entry-point test_plugin.not_existing; }",
515  NULL
516  };
517 
518  amxd_dm_init(&dm);
519  amxo_parser_init(&parser);
520 
521  for(int i = 0; odls[i] != NULL; i++) {
522  assert_int_not_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
523  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_function_not_found);
524  amxd_dm_clean(&dm);
525  }
526 
527  amxo_parser_clean(&parser);
528  amxd_dm_clean(&dm);
529 }

◆ test_not_resolved_action()

void test_not_resolved_action ( UNUSED void **  state)

Definition at line 556 of file test_invalid_odl.c.

556  {
557  amxd_dm_t dm;
558  amxo_parser_t parser;
559  const char* odls[] = {
560  "%define { object Test { on action \"list\" call not_existing; } }",
561  "%define { object Test { string Text { on action read call no_existing; } } }",
562  "%define { object Test { on action write call not_existing; } }",
563  NULL
564  };
565 
566  amxd_dm_init(&dm);
567  amxo_parser_init(&parser);
568 
569  for(int i = 0; odls[i] != NULL; i++) {
570  assert_int_equal(amxo_parser_parse_string(&parser, odls[i], amxd_dm_get_root(&dm)), 0);
571  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_ok);
572  amxd_dm_clean(&dm);
573  }
574 
575  amxo_parser_clean(&parser);
576  amxd_dm_clean(&dm);
577 }

◆ test_parse_non_existing_file()

void test_parse_non_existing_file ( UNUSED void **  state)

Definition at line 747 of file test_invalid_odl.c.

747  {
748  amxd_dm_t dm;
749  amxo_parser_t* parser = NULL;
750 
751  amxd_dm_init(&dm);
752  amxo_parser_new(&parser);
753 
754  assert_int_not_equal(amxo_parser_parse_file(parser, "./non-existing.odl", amxd_dm_get_root(&dm)), 0);
755 
756  amxo_parser_delete(&parser);
757  amxd_dm_clean(&dm);
759 }
int amxo_parser_new(amxo_parser_t **parser)
Allocates memory for a new parser instance on the heap and initializes the odl parser.
void amxo_parser_delete(amxo_parser_t **parser)
Cleans the odl parser content and frees the allocated memory.
void amxo_resolver_import_close_all(void)
Unloads all loaded shared objects.

◆ test_select_none_existing_obj()

void test_select_none_existing_obj ( UNUSED void **  state)

Definition at line 365 of file test_invalid_odl.c.

365  {
366  amxd_dm_t dm;
367  amxo_parser_t parser;
368  const char* odl = "%define { object Test; } %populate { object NoneExisting; }";
369 
370  amxd_dm_init(&dm);
371  amxo_parser_init(&parser);
372 
373  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
374  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_object_not_found);
375 
376  amxo_parser_clean(&parser);
377  amxd_dm_clean(&dm);
378 }

◆ test_select_none_existing_param()

void test_select_none_existing_param ( UNUSED void **  state)

Definition at line 380 of file test_invalid_odl.c.

380  {
381  amxd_dm_t dm;
382  amxo_parser_t parser;
383  const char* odl = "%define { object Test { string P1;} } %populate { object Test { parameter P2 = \"text\"; } }";
384 
385  amxd_dm_init(&dm);
386  amxo_parser_init(&parser);
387 
388  assert_int_not_equal(amxo_parser_parse_string(&parser, odl, amxd_dm_get_root(&dm)), 0);
389  assert_int_equal(amxo_parser_get_status(&parser), amxd_status_parameter_not_found);
390 
391  amxo_parser_clean(&parser);
392  amxd_dm_clean(&dm);
393 }