libamxd  6.4.1
Data Model Manager
test_amxd_key_parameter.c File Reference
#include <stdlib.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <cmocka.h>
#include <sys/signalfd.h>
#include <string.h>
#include <stdio.h>
#include <amxc/amxc.h>
#include <amxp/amxp_signal.h>
#include <amxp/amxp_slot.h>
#include <amxp/amxp_expression.h>
#include <amxd/amxd_common.h>
#include <amxd/amxd_transaction.h>
#include <amxd/amxd_dm.h>
#include <amxd/amxd_object.h>
#include <amxd/amxd_object_expression.h>
#include <amxd/amxd_action.h>
#include "test_amxd_key_parameter.h"
#include <amxc/amxc_macros.h>

Go to the source code of this file.

Functions

static amxd_status_t amxd_param_cleanup_data (amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, void *priv)
 
static void test_build_dm (void)
 
int test_key_parameter_setup (UNUSED void **state)
 
int test_key_parameter_teardown (UNUSED void **state)
 
void test_key_flag_is_set (UNUSED void **state)
 
void test_can_add_key_param_if_no_instances_exist (UNUSED void **state)
 
void test_key_parameters_must_be_set (UNUSED void **state)
 
void test_key_parameters_must_be_unique (UNUSED void **state)
 
void test_can_not_add_key_params_if_instances_exist (UNUSED void **state)
 
void test_can_not_unset_key_attr (UNUSED void **state)
 
void test_can_not_delete_key_parameter (UNUSED void **state)
 
void test_can_not_add_key_param_to (UNUSED void **state)
 
void test_can_not_set_key_attr_on_params_of (UNUSED void **state)
 
void test_object_has_key_parameters (UNUSED void **state)
 
void test_key_parameter_values_are_immutable (UNUSED void **state)
 
void test_can_build_key_expression (UNUSED void **state)
 
void test_amxd_object_add_instance_verifies_keys (UNUSED void **state)
 
void test_can_check_object_has_key_parameters (UNUSED void **state)
 
void test_can_create_instance_with_unique_keys (UNUSED void **state)
 
void test_can_find_object_with_keys (UNUSED void **state)
 
void test_find_fails_with_invalid_expression_part (UNUSED void **state)
 
void test_find_fails_with_wildcard (UNUSED void **state)
 
void test_can_create_instance_with_alias (UNUSED void **state)
 
void test_can_create_instance_with_non_key_alias (UNUSED void **state)
 
void test_creation_fails_when_alias_value_is_wrong_type (UNUSED void **state)
 
void test_creation_fails_when_alias_starts_with_number (UNUSED void **state)
 
void test_can_find_instances_with_alias (UNUSED void **state)
 
void test_can_create_instances_with_keys_that_has_validation (UNUSED void **state)
 
void test_can_change_mutable_key (UNUSED void **state)
 
void test_adding_duplicate_fails (UNUSED void **state)
 
void test_changing_mutable_key_fails_if_duplicate (UNUSED void **state)
 

Variables

static amxd_dm_t dm
 

Function Documentation

◆ amxd_param_cleanup_data()

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

Definition at line 86 of file test_amxd_key_parameter.c.

91  {
93  amxc_var_t* data = (amxc_var_t*) priv;
94 
95  if((reason != action_object_destroy) &&
96  ( reason != action_param_destroy)) {
98  goto exit;
99  }
100 
101  // action private data must not be removed when the action is used
102  // on derived objects.
103  // only remove action data when the action is owned by the object or
104  // parameter on which the action is called.
105  if(reason == action_object_destroy) {
107  amxc_var_delete(&data);
109  }
110  } else {
112  amxc_var_delete(&data);
114  }
115  }
116 
117 exit:
118  return status;
119 }
bool amxd_object_has_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
void amxd_object_set_action_cb_data(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
bool amxd_param_has_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
void amxd_param_set_action_cb_data(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *data)
@ action_param_destroy
Definition: amxd_types.h:116
@ action_object_destroy
Definition: amxd_types.h:125
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
Definition: amxd_types.h:83
@ amxd_status_ok
Definition: amxd_types.h:78
static amxd_status_t amxd_param_cleanup_data(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, UNUSED const amxc_var_t *const args, UNUSED amxc_var_t *const retval, void *priv)
static amxd_status_t status

◆ test_adding_duplicate_fails()

void test_adding_duplicate_fails ( UNUSED void **  state)

Definition at line 825 of file test_amxd_key_parameter.c.

825  {
826  amxd_trans_t transaction;
827  amxd_object_t* object = NULL;
828 
829  amxd_trans_init(&transaction);
830  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject");
831  amxd_trans_add_inst(&transaction, 2, NULL);
832  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TCP");
833  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
834  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.2.");
835  assert_null(object);
836 
837  amxd_trans_clean(&transaction);
838 }
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
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_dm_t dm

◆ test_amxd_object_add_instance_verifies_keys()

void test_amxd_object_add_instance_verifies_keys ( UNUSED void **  state)

Definition at line 468 of file test_amxd_key_parameter.c.

468  {
469  amxd_object_t* object = NULL;
470  amxd_object_t* instance = NULL;
471  amxc_var_t key_params;
472  amxc_var_t* param1 = NULL;
473  amxc_var_t* paramextra = NULL;
474 
475  amxc_var_init(&key_params);
476  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
477  param1 = amxc_var_add_key(cstring_t, &key_params, "Param1", "TheKeyValue");
478  paramextra = amxc_var_add_key(cstring_t, &key_params, "ParamExtra", "TheKeyValue");
479 
480  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
481  assert_int_not_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
482  assert_ptr_equal(instance, NULL);
483 
484  amxc_var_set(cstring_t, param1, "Unique");
485  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
486  assert_ptr_not_equal(instance, NULL);
487 
488  amxc_var_set(cstring_t, paramextra, "Unique");
489  assert_int_equal(amxd_object_add_instance(NULL, object, NULL, 0, &key_params), 0);
490 
491  amxc_var_clean(&key_params);
492 }
amxd_status_t amxd_object_add_instance(amxd_object_t **object, amxd_object_t *templ, const char *name, uint32_t index, amxc_var_t *values)
Data model object constructor function.

◆ test_build_dm()

static void test_build_dm ( void  )
static

Definition at line 122 of file test_amxd_key_parameter.c.

122  {
123  amxd_object_t* object = NULL;
124  amxd_object_t* child_object = NULL;
125  amxd_param_t* param = NULL;
126  amxc_var_t value;
127  amxc_var_t* enum_data = NULL;
128 
129  amxc_var_init(&value);
130  amxc_var_set(cstring_t, &value, "TestValue");
131 
132  amxc_var_new(&enum_data);
133  amxc_var_set_type(enum_data, AMXC_VAR_ID_LIST);
134  amxc_var_add(cstring_t, enum_data, "UDP");
135  amxc_var_add(cstring_t, enum_data, "TCP");
136 
137  assert_int_equal(amxd_dm_init(&dm), 0);
138 
139  assert_int_equal(amxd_object_new(&object, amxd_object_singleton, "MyObject"), 0);
140  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
141  assert_int_equal(amxd_param_set_value(param, &value), 0);
142  assert_int_equal(amxd_object_add_param(object, param), 0);
143  assert_int_equal(amxd_dm_add_root_object(&dm, object), 0);
144 
145  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "ChildObject"), 0);
146  assert_int_equal(amxd_object_add_object(object, child_object), 0);
147  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
148  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
149  assert_int_equal(amxd_object_add_param(child_object, param), 0);
150  assert_int_equal(amxd_param_new(&param, "Param2", AMXC_VAR_ID_BOOL), 0);
151  assert_int_equal(amxd_object_add_param(child_object, param), 0);
152  assert_int_equal(amxd_param_new(&param, "Param3", AMXC_VAR_ID_UINT32), 0);
153  assert_int_equal(amxd_object_add_param(child_object, param), 0);
154 
155  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "KeyValidateObject"), 0);
156  assert_int_equal(amxd_object_add_object(object, child_object), 0);
157  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
158  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
159  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_mutable, true), 0);
160  assert_int_equal(amxd_param_add_action_cb(param, action_param_validate, amxd_action_param_check_enum, enum_data), 0);
161  assert_int_equal(amxd_param_add_action_cb(param, action_param_destroy, amxd_param_cleanup_data, enum_data), 0);
162  assert_int_equal(amxd_object_add_param(child_object, param), 0);
163 
164  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "UKeyObject"), 0);
165  assert_int_equal(amxd_object_add_object(object, child_object), 0);
166  assert_int_equal(amxd_param_new(&param, "UKey1", AMXC_VAR_ID_CSTRING), 0);
167  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
168  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_unique, true), 0);
169  assert_int_equal(amxd_object_add_param(child_object, param), 0);
170  assert_int_equal(amxd_param_new(&param, "UKey2", AMXC_VAR_ID_CSTRING), 0);
171  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
172  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_unique, true), 0);
173  assert_int_equal(amxd_object_add_param(child_object, param), 0);
174  assert_int_equal(amxd_param_new(&param, "KeyParam1", AMXC_VAR_ID_CSTRING), 0);
175  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
176  assert_int_equal(amxd_object_add_param(child_object, param), 0);
177  assert_int_equal(amxd_param_new(&param, "KeyParam2", AMXC_VAR_ID_CSTRING), 0);
178  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
179  assert_int_equal(amxd_object_add_param(child_object, param), 0);
180  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
181  assert_int_equal(amxd_object_add_param(child_object, param), 0);
182  assert_int_equal(amxd_param_new(&param, "Param2", AMXC_VAR_ID_CSTRING), 0);
183  assert_int_equal(amxd_object_add_param(child_object, param), 0);
184 
185  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "AliasObject"), 0);
186  assert_int_equal(amxd_object_add_object(object, child_object), 0);
187  assert_int_equal(amxd_param_new(&param, "Alias", AMXC_VAR_ID_CSTRING), 0);
188  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
189  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_unique, true), 0);
190  assert_int_equal(amxd_object_add_param(child_object, param), 0);
191  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
192  assert_int_equal(amxd_object_add_param(child_object, param), 0);
193 
194  assert_int_equal(amxd_object_new(&child_object, amxd_object_template, "FakeAliasObject"), 0);
195  assert_int_equal(amxd_object_add_object(object, child_object), 0);
196  assert_int_equal(amxd_param_new(&param, "Alias", AMXC_VAR_ID_CSTRING), 0);
197  assert_int_equal(amxd_object_add_param(child_object, param), 0);
198  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
199  assert_int_equal(amxd_object_add_param(child_object, param), 0);
200 
201  assert_int_equal(amxd_object_new(&child_object, amxd_object_singleton, "TestSingleton"), 0);
202  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
203  assert_int_equal(amxd_object_add_param(child_object, param), 0);
204  assert_int_equal(amxd_object_add_object(object, child_object), 0);
205 
206  assert_int_equal(amxd_object_new(&child_object, amxd_object_mib, "TestMib"), 0);
207  assert_int_equal(amxd_param_new(&param, "Param1", AMXC_VAR_ID_CSTRING), 0);
208  assert_int_equal(amxd_object_add_param(child_object, param), 0);
209  assert_int_equal(amxd_dm_store_mib(&dm, child_object), 0);
210 
211  amxc_var_clean(&value);
212 }
amxd_status_t amxd_dm_store_mib(amxd_dm_t *const dm, amxd_object_t *const object)
Definition: amxd_dm.c:378
amxd_status_t amxd_param_new(amxd_param_t **param, const char *name, const uint32_t type)
amxd_status_t amxd_param_set_value(amxd_param_t *const param, const amxc_var_t *const value)
amxd_status_t amxd_param_set_attr(amxd_param_t *param, const amxd_pattr_id_t attr, const bool enable)
amxd_status_t amxd_param_add_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn, void *priv)
@ amxd_pattr_unique
Definition: amxd_types.h:363
@ amxd_pattr_mutable
Definition: amxd_types.h:365
@ amxd_pattr_key
Definition: amxd_types.h:362
@ action_param_validate
Definition: amxd_types.h:114
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_mib
Definition: amxd_types.h:188
@ amxd_object_singleton
Definition: amxd_types.h:181
amxd_status_t amxd_dm_add_root_object(amxd_dm_t *const dm, amxd_object_t *const object)
Adds an object to the root of the data model.
Definition: amxd_dm.c:418
amxd_status_t amxd_dm_init(amxd_dm_t *dm)
Initializes a data model structure.
Definition: amxd_dm.c:334
amxd_status_t amxd_object_add_object(amxd_object_t *const parent, amxd_object_t *const child)
Adds an object in the data model tree.
Definition: amxd_object.c:207
amxd_status_t amxd_object_add_param(amxd_object_t *const object, amxd_param_t *const param)
Adds a parameter definition to an object.
amxd_status_t amxd_object_new(amxd_object_t **object, const amxd_object_type_t type, const char *name)
Data model object constructor function.
Definition: amxd_object.c:185
amxd_status_t amxd_action_param_check_enum(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default check enum parameter validate action implementation.

◆ test_can_add_key_param_if_no_instances_exist()

void test_can_add_key_param_if_no_instances_exist ( UNUSED void **  state)

Definition at line 232 of file test_amxd_key_parameter.c.

232  {
233  amxd_object_t* object = NULL;
234  amxd_param_t* param = NULL;
235 
236  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
237  assert_int_equal(amxd_param_new(&param, "ParamExtra", AMXC_VAR_ID_CSTRING), 0);
238  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
239  assert_int_equal(amxd_object_add_param(object, param), 0);
240 }

◆ test_can_build_key_expression()

void test_can_build_key_expression ( UNUSED void **  state)

Definition at line 439 of file test_amxd_key_parameter.c.

439  {
440  amxc_var_t key_params;
441  amxp_expr_t* expr = NULL;
442  amxd_object_t* object = NULL;
443 
444  amxc_var_init(&key_params);
445  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
446 
447  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
448  amxc_var_add_key(cstring_t, &key_params, "Param1", "test");
449  amxc_var_add_key(cstring_t, &key_params, "ParamExtra", "test");
450  assert_int_equal(amxd_object_new_key_expr(object, &expr, &key_params), 0);
451  assert_ptr_not_equal(expr, NULL);
452  assert_false(amxd_object_has_matching_instances(object, expr));
453 
454  amxp_expr_delete(&expr);
455  amxc_var_clean(&key_params);
456 
457  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
458  amxc_var_add_key(cstring_t, &key_params, "Param1", "TheKeyValue");
459  amxc_var_add_key(cstring_t, &key_params, "ParamExtra", "TheKeyValue");
460  assert_int_equal(amxd_object_new_key_expr(object, &expr, &key_params), 0);
461  assert_ptr_not_equal(expr, NULL);
462  assert_true(amxd_object_has_matching_instances(object, expr));
463 
464  amxp_expr_delete(&expr);
465  amxc_var_clean(&key_params);
466 }
amxd_status_t amxd_object_new_key_expr(amxd_object_t *const templ, amxp_expr_t **expr, const amxc_var_t *const data)
bool amxd_object_has_matching_instances(const amxd_object_t *const templ, amxp_expr_t *expr)

◆ test_can_change_mutable_key()

void test_can_change_mutable_key ( UNUSED void **  state)

Definition at line 811 of file test_amxd_key_parameter.c.

811  {
812  amxd_trans_t transaction;
813  amxd_object_t* object = NULL;
814 
815  amxd_trans_init(&transaction);
816  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject.1.");
817  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TCP");
818  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
819  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.1");
820  assert_non_null(object);
821 
822  amxd_trans_clean(&transaction);
823 }

◆ test_can_check_object_has_key_parameters()

void test_can_check_object_has_key_parameters ( UNUSED void **  state)

Definition at line 494 of file test_amxd_key_parameter.c.

494  {
495  amxd_object_t* object = NULL;
496 
497  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
498  assert_true(amxd_object_has_keys(object));
499 
500  object = amxd_dm_findf(&dm, "MyObject.TestSingleton");
501  assert_false(amxd_object_has_keys(object));
502 
503  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
504  assert_true(amxd_object_has_keys(object));
505 
506  assert_false(amxd_object_has_keys(NULL));
507 }
bool amxd_object_has_keys(amxd_object_t *const instance)

◆ test_can_create_instance_with_alias()

void test_can_create_instance_with_alias ( UNUSED void **  state)

Definition at line 632 of file test_amxd_key_parameter.c.

632  {
633  amxd_object_t* object = NULL;
634  amxd_object_t* instance = NULL;
635  char* text = NULL;
636  amxc_var_t key_params;
637 
638  amxc_var_init(&key_params);
639  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
640 
641  object = amxd_dm_findf(&dm, "MyObject.AliasObject");
642  assert_true(amxd_object_has_keys(object));
643 
644  assert_int_equal(amxd_object_new_instance(&instance, object, "SillyName", 0, NULL), 0);
645  assert_non_null(instance);
646  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "SillyName");
647  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
648  assert_non_null(text);
649  assert_string_equal(text, "SillyName");
650  free(text);
651 
652  assert_int_equal(amxd_object_new_instance(&instance, object, NULL, 0, NULL), 0);
653  assert_non_null(instance);
654  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "cpe-AliasObject-2");
655  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
656  assert_non_null(text);
657  assert_string_equal(text, "cpe-AliasObject-2");
658  free(text);
659 
660  amxc_var_add_key(cstring_t, &key_params, "Alias", "T&T-%CPE");
661  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
662  assert_non_null(instance);
663  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "T&T-%CPE");
664  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
665  assert_non_null(text);
666  assert_string_equal(text, "T&T-%CPE");
667  free(text);
668 
669  amxc_var_clean(&key_params);
670 }
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
#define amxd_object_get_value(type, object, name, status)
Helper macro for getting a value.
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.
const char * amxd_object_get_name(const amxd_object_t *const object, const uint32_t flags)
Get the name of the object (or index as a string for instance objects)
Definition: amxd_object.c:239

◆ test_can_create_instance_with_non_key_alias()

void test_can_create_instance_with_non_key_alias ( UNUSED void **  state)

Definition at line 672 of file test_amxd_key_parameter.c.

672  {
673  amxd_object_t* object = NULL;
674  amxd_object_t* instance = NULL;
675  char* text = NULL;
676  amxc_var_t key_params;
677 
678  amxc_var_init(&key_params);
679  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
680 
681  object = amxd_dm_findf(&dm, "MyObject.FakeAliasObject");
682  assert_false(amxd_object_has_keys(object));
683 
684  assert_int_equal(amxd_object_new_instance(&instance, object, "SillyName", 0, NULL), 0);
685  assert_non_null(instance);
686  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "SillyName");
687  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
688  assert_string_equal(text, "");
689  free(text);
690 
691  assert_int_equal(amxd_object_new_instance(&instance, object, NULL, 0, NULL), 0);
692  assert_non_null(instance);
693  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "2");
694  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
695  assert_string_equal(text, "");
696  free(text);
697 
698  amxc_var_add_key(cstring_t, &key_params, "Alias", "SillyName");
699  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
700  assert_non_null(instance);
701  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "3");
702  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
703  assert_non_null(text);
704  assert_string_equal(text, "SillyName");
705  free(text);
706 
707  amxc_var_clean(&key_params);
708 }

◆ test_can_create_instance_with_unique_keys()

void test_can_create_instance_with_unique_keys ( UNUSED void **  state)

Definition at line 509 of file test_amxd_key_parameter.c.

509  {
510  amxd_object_t* object = NULL;
511  amxc_var_t key_params;
512  amxd_object_t* instance = NULL;
513  amxc_var_t* uk1 = NULL;
514  amxc_var_t* uk2 = NULL;
515  amxc_var_t* k1 = NULL;
516  amxc_var_t* k2 = NULL;
517  amxc_var_t* p1 = NULL;
518 
519  amxc_var_init(&key_params);
520  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
521 
522  object = amxd_dm_findf(&dm, "MyObject.UKeyObject");
523  assert_true(amxd_object_has_keys(object));
524 
525  uk1 = amxc_var_add_key(cstring_t, &key_params, "UKey1", "U1");
526  uk2 = amxc_var_add_key(cstring_t, &key_params, "UKey2", "U2");
527  k1 = amxc_var_add_key(cstring_t, &key_params, "KeyParam1", "U3");
528  k2 = amxc_var_add_key(cstring_t, &key_params, "KeyParam2", "U4");
529  p1 = amxc_var_add_key(cstring_t, &key_params, "Param1", "*");
530  amxc_var_add_key(cstring_t, &key_params, "Param2", "]");
531 
532  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
533  assert_non_null(instance);
534  assert_int_not_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
535 
536  amxc_var_set(cstring_t, uk1, "U2");
537  amxc_var_set(cstring_t, uk2, "U1");
538  amxc_var_set(cstring_t, k1, "U4");
539  amxc_var_set(cstring_t, k2, "U3");
540  amxc_var_set(cstring_t, p1, "[");
541  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
542  assert_non_null(instance);
543 
544  amxc_var_set(cstring_t, uk1, "U9");
545  amxc_var_set(cstring_t, uk2, "U9");
546  amxc_var_set(cstring_t, k1, "U4");
547  amxc_var_set(cstring_t, k2, "U2");
548  amxc_var_set(cstring_t, p1, "[.*]");
549  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
550  assert_non_null(instance);
551 
552  amxc_var_clean(&key_params);
553 }

◆ test_can_create_instances_with_keys_that_has_validation()

void test_can_create_instances_with_keys_that_has_validation ( UNUSED void **  state)

Definition at line 796 of file test_amxd_key_parameter.c.

796  {
797  amxd_trans_t transaction;
798  amxd_object_t* object = NULL;
799 
800  amxd_trans_init(&transaction);
801  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject");
802  amxd_trans_add_inst(&transaction, 1, NULL);
803  amxd_trans_set_value(cstring_t, &transaction, "Param1", "UDP");
804  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
805  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.1");
806  assert_non_null(object);
807 
808  amxd_trans_clean(&transaction);
809 }

◆ test_can_find_instances_with_alias()

void test_can_find_instances_with_alias ( UNUSED void **  state)

Definition at line 761 of file test_amxd_key_parameter.c.

761  {
762  amxd_object_t* object = NULL;
763  amxd_object_t* instance = NULL;
764  amxd_object_t* finstance = NULL;
765  char* text = NULL;
766 
767  object = amxd_dm_findf(&dm, "MyObject.AliasObject");
768  assert_true(amxd_object_has_keys(object));
769 
770  assert_int_equal(amxd_object_new_instance(&instance, object, "Unique.Alias.Name", 0, NULL), 0);
771  assert_non_null(instance);
772  assert_string_equal(amxd_object_get_name(instance, AMXD_OBJECT_NAMED), "Unique.Alias.Name");
773  text = amxd_object_get_value(cstring_t, instance, "Alias", NULL);
774  assert_non_null(text);
775  assert_string_equal(text, "Unique.Alias.Name");
776  free(text);
777 
778  finstance = amxd_dm_findf(&dm, "MyObject.AliasObject.Unique.Alias.Name");
779  assert_null(finstance);
780 
781  finstance = amxd_dm_findf(&dm, "MyObject.AliasObject.\"Unique.Alias.Name\"");
782  assert_null(finstance);
783 
784  finstance = amxd_dm_findf(&dm, "MyObject.AliasObject.'Unique.Alias.Name'");
785  assert_null(finstance);
786 
787  finstance = amxd_dm_findf(&dm, "MyObject.AliasObject.[Unique.Alias.Name]");
788  assert_non_null(finstance);
789  assert_ptr_equal(finstance, instance);
790 
791  finstance = amxd_dm_findf(&dm, "MyObject.AliasObject.[Alias == 'Unique.Alias.Name']");
792  assert_non_null(finstance);
793  assert_ptr_equal(finstance, instance);
794 }

◆ test_can_find_object_with_keys()

void test_can_find_object_with_keys ( UNUSED void **  state)

Definition at line 555 of file test_amxd_key_parameter.c.

555  {
556  amxd_object_t* object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[UKey1=='U2']");
557  assert_non_null(object);
558 
559  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[UKey2=='U2']");
560  assert_non_null(object);
561 
562  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[KeyParam1=='U3'&&KeyParam2=='U4']");
563  assert_non_null(object);
564 
565  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[KeyParam1=='U4'&&KeyParam2=='U3']");
566  assert_non_null(object);
567 
568  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[Param1=='*']");
569  assert_non_null(object);
570 
571  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[Param1=='[']");
572  assert_non_null(object);
573 
574  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[Param1=='[.*]']");
575  assert_non_null(object);
576 }

◆ test_can_not_add_key_param_to()

void test_can_not_add_key_param_to ( UNUSED void **  state)

Definition at line 343 of file test_amxd_key_parameter.c.

343  {
344  amxd_object_t* object = NULL;
345  amxd_param_t* param = NULL;
346 
347  assert_int_equal(amxd_param_new(&param, "TestParam", AMXC_VAR_ID_CSTRING), 0);
348  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
349 
350  // singleton
351  object = amxd_dm_findf(&dm, "MyObject.TestSingleton");
352  assert_ptr_not_equal(object, NULL);
353  assert_int_not_equal(amxd_object_add_param(object, param), 0);
354  assert_ptr_equal(amxd_object_get_param_def(object, "TestParam"), NULL);
355  assert_ptr_equal(amxd_param_get_owner(param), NULL);
356 
357  // mib
358  object = amxd_dm_get_mib(&dm, "TestMib");
359  assert_ptr_not_equal(object, NULL);
360  assert_int_not_equal(amxd_object_add_param(object, param), 0);
361  assert_ptr_equal(amxd_object_get_param_def(object, "TestParam"), NULL);
362  assert_ptr_equal(amxd_param_get_owner(param), NULL);
363 
364  // instance
365  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
366  assert_ptr_not_equal(object, NULL);
367  assert_int_not_equal(amxd_object_add_param(object, param), 0);
368  assert_ptr_equal(amxd_object_get_param_def(object, "TestParam"), NULL);
369  assert_ptr_equal(amxd_param_get_owner(param), NULL);
370 
371  amxd_param_delete(&param);
372 }
amxd_object_t * amxd_dm_get_mib(amxd_dm_t *const dm, const char *name)
Definition: amxd_dm.c:397
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
amxd_status_t amxd_param_delete(amxd_param_t **param)
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.

◆ test_can_not_add_key_params_if_instances_exist()

void test_can_not_add_key_params_if_instances_exist ( UNUSED void **  state)

Definition at line 298 of file test_amxd_key_parameter.c.

298  {
299  amxd_object_t* object = NULL;
300  amxd_param_t* param = NULL;
301 
302  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
303  assert_int_equal(amxd_param_new(&param, "ParamExtra2", AMXC_VAR_ID_CSTRING), 0);
304  assert_int_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
305  assert_int_not_equal(amxd_object_add_param(object, param), 0);
306 
307  assert_ptr_equal(amxd_param_get_owner(param), NULL);
308  assert_ptr_equal(amxd_object_get_param_def(object, "ParamExtra2"), NULL);
309 
310  amxd_param_delete(&param);
311 }

◆ test_can_not_delete_key_parameter()

void test_can_not_delete_key_parameter ( UNUSED void **  state)

Definition at line 326 of file test_amxd_key_parameter.c.

326  {
327  amxd_object_t* object = NULL;
328  amxd_param_t* param = NULL;
329 
330  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
331  param = amxd_object_get_param_def(object, "ParamExtra");
332  assert_int_not_equal(amxd_param_delete(&param), 0);
333  param = amxd_object_get_param_def(object, "ParamExtra");
334  assert_ptr_not_equal(param, NULL);
335 
336  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
337  param = amxd_object_get_param_def(object, "ParamExtra");
338  assert_int_not_equal(amxd_param_delete(&param), 0);
339  param = amxd_object_get_param_def(object, "ParamExtra");
340  assert_ptr_not_equal(param, NULL);
341 }

◆ test_can_not_set_key_attr_on_params_of()

void test_can_not_set_key_attr_on_params_of ( UNUSED void **  state)

Definition at line 374 of file test_amxd_key_parameter.c.

374  {
375  amxd_object_t* object = NULL;
376  amxd_param_t* param = NULL;
377 
378  // singleton
379  object = amxd_dm_findf(&dm, "MyObject.TestSingleton");
380  assert_ptr_not_equal(object, NULL);
381  param = amxd_object_get_param_def(object, "Param1");
382  assert_ptr_not_equal(param, NULL);
383  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
384 
385  // mib
386  object = amxd_dm_get_mib(&dm, "TestMib");
387  assert_ptr_not_equal(object, NULL);
388  param = amxd_object_get_param_def(object, "Param1");
389  assert_ptr_not_equal(param, NULL);
390  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
391 
392  // instance
393  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
394  assert_ptr_not_equal(object, NULL);
395  param = amxd_object_get_param_def(object, "Param2");
396  assert_ptr_not_equal(param, NULL);
397  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
398 
399  // template with instances
400  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
401  assert_ptr_not_equal(object, NULL);
402  param = amxd_object_get_param_def(object, "Param2");
403  assert_ptr_not_equal(param, NULL);
404  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, true), 0);
405 }

◆ test_can_not_unset_key_attr()

void test_can_not_unset_key_attr ( UNUSED void **  state)

Definition at line 313 of file test_amxd_key_parameter.c.

313  {
314  amxd_object_t* object = NULL;
315  amxd_param_t* param = NULL;
316 
317  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
318  param = amxd_object_get_param_def(object, "ParamExtra");
319  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, false), 0);
320 
321  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
322  param = amxd_object_get_param_def(object, "ParamExtra");
323  assert_int_not_equal(amxd_param_set_attr(param, amxd_pattr_key, false), 0);
324 }

◆ test_changing_mutable_key_fails_if_duplicate()

void test_changing_mutable_key_fails_if_duplicate ( UNUSED void **  state)

Definition at line 840 of file test_amxd_key_parameter.c.

840  {
841  amxd_trans_t transaction;
842  amxd_object_t* object = NULL;
843 
844  amxd_trans_init(&transaction);
845  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject");
846  amxd_trans_add_inst(&transaction, 2, NULL);
847  amxd_trans_set_value(cstring_t, &transaction, "Param1", "UDP");
848  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
849  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.2.");
850  assert_non_null(object);
851  amxd_trans_clean(&transaction);
852 
853  amxd_trans_init(&transaction);
854  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject.1.");
855  amxd_trans_set_value(cstring_t, &transaction, "Param1", "UDP");
856  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
857  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.1");
858  assert_non_null(object);
859  amxd_trans_clean(&transaction);
860 
861  amxd_trans_init(&transaction);
862  amxd_trans_select_pathf(&transaction, "MyObject.KeyValidateObject.2.");
863  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TCP");
864  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
865  object = amxd_dm_findf(&dm, "MyObject.KeyValidateObject.2");
866  assert_non_null(object);
867 
868  amxd_trans_clean(&transaction);
869 
870 }

◆ test_creation_fails_when_alias_starts_with_number()

void test_creation_fails_when_alias_starts_with_number ( UNUSED void **  state)

Definition at line 739 of file test_amxd_key_parameter.c.

739  {
740  amxd_object_t* object = NULL;
741  amxd_object_t* instance = NULL;
742 
743  amxc_var_t key_params;
744 
745  amxc_var_init(&key_params);
746  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
747 
748  object = amxd_dm_findf(&dm, "MyObject.AliasObject");
749  assert_true(amxd_object_has_keys(object));
750 
751  assert_int_not_equal(amxd_object_new_instance(&instance, object, "2nd-SillyName", 0, NULL), 0);
752  assert_null(instance);
753 
754  amxc_var_add_key(cstring_t, &key_params, "Alias", "3th-SillyName");
755  assert_int_not_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
756  assert_null(instance);
757 
758  amxc_var_clean(&key_params);
759 }

◆ test_creation_fails_when_alias_value_is_wrong_type()

void test_creation_fails_when_alias_value_is_wrong_type ( UNUSED void **  state)

Definition at line 710 of file test_amxd_key_parameter.c.

710  {
711  amxd_object_t* object = NULL;
712  amxd_object_t* instance = NULL;
713  amxc_var_t key_params;
714  amxc_var_t* alias = NULL;
715 
716  amxc_var_init(&key_params);
717  amxc_var_set_type(&key_params, AMXC_VAR_ID_HTABLE);
718 
719  object = amxd_dm_findf(&dm, "MyObject.AliasObject");
720  assert_true(amxd_object_has_keys(object));
721 
722  alias = amxc_var_add_key(bool, &key_params, "Alias", true);
723  assert_int_not_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
724  assert_null(instance);
725 
726  amxc_var_set(ssv_string_t, alias, "YAA");
727  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
728 
729  amxc_var_set(uint32_t, alias, 1024);
730  assert_int_not_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
731  assert_null(instance);
732 
733  amxc_var_set(csv_string_t, alias, "YAA2");
734  assert_int_equal(amxd_object_add_instance(&instance, object, NULL, 0, &key_params), 0);
735 
736  amxc_var_clean(&key_params);
737 }

◆ test_find_fails_with_invalid_expression_part()

void test_find_fails_with_invalid_expression_part ( UNUSED void **  state)

Definition at line 578 of file test_amxd_key_parameter.c.

578  {
579  amxd_object_t* object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[UKey1!>'U2\']");
580  assert_null(object);
581  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
582 
583  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[]");
584  assert_null(object);
585  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
586 
587  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.*");
588  assert_null(object);
589  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
590 
591  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[NotExisiting>400]");
592  assert_null(object);
593  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
594 
595  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[UKey2==100");
596  assert_null(object);
597  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
598 
599  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[KeyParam1=='U4']");
600  assert_null(object);
601  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_duplicate);
602 
603  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[UKey1=='Z999']");
604  assert_null(object);
605  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_ok);
606 
607  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[2A]");
608  assert_null(object);
609  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
610 
611  object = amxd_dm_findf(&dm, "MyObject.[2A]");
612  assert_null(object);
613  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
614 
615  object = amxd_dm_findf(&dm, "MyObject.[Param1==\"TestValue\"]");
616  assert_null(object);
617  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
618 
619  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.[Param2==']']");
620  assert_null(object);
621  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_duplicate);
622 }
static amxd_status_t amxd_dm_get_status(amxd_dm_t *dm)
Definition: amxd_dm.h:292
@ amxd_status_invalid_path
Definition: amxd_types.h:99
@ amxd_status_duplicate
Definition: amxd_types.h:91

◆ test_find_fails_with_wildcard()

void test_find_fails_with_wildcard ( UNUSED void **  state)

Definition at line 624 of file test_amxd_key_parameter.c.

624  {
625  amxd_object_t* object = NULL;
626 
627  object = amxd_dm_findf(&dm, "MyObject.UKeyObject.*");
628  assert_null(object);
629  assert_int_equal(amxd_dm_get_status(&dm), amxd_status_invalid_path);
630 }

◆ test_key_flag_is_set()

void test_key_flag_is_set ( UNUSED void **  state)

Definition at line 225 of file test_amxd_key_parameter.c.

225  {
226  amxd_object_t* object = amxd_dm_findf(&dm, "MyObject.ChildObject");
227  amxd_param_t* param = amxd_object_get_param_def(object, "Param1");
228 
229  assert_true(amxd_param_is_attr_set(param, amxd_pattr_key));
230 }
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)

◆ test_key_parameter_setup()

int test_key_parameter_setup ( UNUSED void **  state)

Definition at line 214 of file test_amxd_key_parameter.c.

214  {
215  test_build_dm();
216  return 0;
217 }
static void test_build_dm(void)

◆ test_key_parameter_teardown()

int test_key_parameter_teardown ( UNUSED void **  state)

Definition at line 219 of file test_amxd_key_parameter.c.

219  {
220  amxd_dm_clean(&dm);
221 
222  return 0;
223 }
void amxd_dm_clean(amxd_dm_t *dm)
Cleans a data model structure.
Definition: amxd_dm.c:365

◆ test_key_parameter_values_are_immutable()

void test_key_parameter_values_are_immutable ( UNUSED void **  state)

Definition at line 427 of file test_amxd_key_parameter.c.

427  {
428  amxd_object_t* object = NULL;
429 
430  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
431  assert_ptr_not_equal(object, NULL);
432  assert_true(amxd_object_has_keys(object));
433 
434  assert_int_not_equal(amxd_object_set_value(cstring_t, object, "ParamExtra", "MyNewValue"), 0);
435  assert_int_not_equal(amxd_object_set_value(cstring_t, object, "Param1", "MyNewValue"), 0);
436  assert_int_equal(amxd_object_set_value(uint32_t, object, "Param3", 500), 0);
437 }
#define amxd_object_set_value(type, object, name, value)
Helper macro for setting a value.

◆ test_key_parameters_must_be_set()

void test_key_parameters_must_be_set ( UNUSED void **  state)

Definition at line 242 of file test_amxd_key_parameter.c.

242  {
243  amxd_trans_t transaction;
244  amxd_object_t* object = NULL;
245 
246  amxd_trans_init(&transaction);
247  amxd_trans_select_pathf(&transaction, "MyObject.ChildObject");
248  amxd_trans_add_inst(&transaction, 1, NULL);
249  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
250  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
251  assert_ptr_equal(object, NULL);
252 
253  amxd_trans_clean(&transaction);
254  amxd_trans_select_pathf(&transaction, "MyObject.ChildObject");
255  amxd_trans_add_inst(&transaction, 1, NULL);
256  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TheKeyValue");
257  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
258  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
259  assert_ptr_equal(object, NULL);
260 
261  amxd_trans_clean(&transaction);
262  amxd_trans_select_pathf(&transaction, "MyObject.ChildObject");
263  amxd_trans_add_inst(&transaction, 1, NULL);
264  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TheKeyValue");
265  amxd_trans_set_value(cstring_t, &transaction, "ParamExtra", "TheKeyValue");
266  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
267  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
268  assert_ptr_not_equal(object, NULL);
269 
270  amxd_trans_clean(&transaction);
271 }

◆ test_key_parameters_must_be_unique()

void test_key_parameters_must_be_unique ( UNUSED void **  state)

Definition at line 273 of file test_amxd_key_parameter.c.

273  {
274  amxd_trans_t transaction;
275  amxd_object_t* object = NULL;
276 
277  amxd_trans_init(&transaction);
278  amxd_trans_select_pathf(&transaction, "MyObject.ChildObject");
279  amxd_trans_add_inst(&transaction, 2, NULL);
280  amxd_trans_set_value(cstring_t, &transaction, "Param1", "TheKeyValue");
281  amxd_trans_set_value(cstring_t, &transaction, "ParamExtra", "TheKeyValue");
282  assert_int_not_equal(amxd_trans_apply(&transaction, &dm), 0);
283  object = amxd_dm_findf(&dm, "MyObject.ChildObject.2");
284  assert_ptr_equal(object, NULL);
285 
286  amxd_trans_clean(&transaction);
287  amxd_trans_select_pathf(&transaction, "MyObject.ChildObject");
288  amxd_trans_add_inst(&transaction, 2, NULL);
289  amxd_trans_set_value(cstring_t, &transaction, "Param1", "OtherValue");
290  amxd_trans_set_value(cstring_t, &transaction, "ParamExtra", "TheKeyValue");
291  assert_int_equal(amxd_trans_apply(&transaction, &dm), 0);
292  object = amxd_dm_findf(&dm, "MyObject.ChildObject.2");
293  assert_ptr_not_equal(object, NULL);
294 
295  amxd_trans_clean(&transaction);
296 }

◆ test_object_has_key_parameters()

void test_object_has_key_parameters ( UNUSED void **  state)

Definition at line 407 of file test_amxd_key_parameter.c.

407  {
408  amxd_object_t* object = NULL;
409 
410  object = amxd_dm_findf(&dm, "MyObject.TestSingleton");
411  assert_ptr_not_equal(object, NULL);
412  assert_false(amxd_object_has_keys(object));
413 
414  object = amxd_dm_get_mib(&dm, "TestMib");
415  assert_ptr_not_equal(object, NULL);
416  assert_false(amxd_object_has_keys(object));
417 
418  object = amxd_dm_findf(&dm, "MyObject.ChildObject.1");
419  assert_ptr_not_equal(object, NULL);
420  assert_true(amxd_object_has_keys(object));
421 
422  object = amxd_dm_findf(&dm, "MyObject.ChildObject");
423  assert_ptr_not_equal(object, NULL);
424  assert_true(amxd_object_has_keys(object));
425 }

Variable Documentation

◆ dm

amxd_dm_t dm
static

Definition at line 84 of file test_amxd_key_parameter.c.