diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_sorcery.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/test_sorcery.c b/tests/test_sorcery.c index 662210253..66dce34ee 100644 --- a/tests/test_sorcery.c +++ b/tests/test_sorcery.c @@ -92,6 +92,15 @@ struct sorcery_test_caching { struct test_sorcery_object object; }; +/*! \brief Global scope apply handler integer to make sure it executed */ +static int apply_handler_called; + +/*! \brief Simple apply handler which sets global scope integer to 1 if called */ +static void test_apply_handler(const struct ast_sorcery *sorcery, void *obj) +{ + apply_handler_called = 1; +} + /*! \brief Global scope caching structure for testing */ static struct sorcery_test_caching cache = { 0, }; @@ -697,6 +706,60 @@ AST_TEST_DEFINE(objectset_apply) return res; } +AST_TEST_DEFINE(objectset_apply_handler) +{ + int res = AST_TEST_PASS; + RAII_VAR(struct ast_sorcery *, sorcery, NULL, ast_sorcery_unref); + RAII_VAR(struct test_sorcery_object *, obj, NULL, ao2_cleanup); + RAII_VAR(struct ast_variable *, objset, NULL, ast_variables_destroy); + + switch (cmd) { + case TEST_INIT: + info->name = "objectset_apply_handler"; + info->category = "/main/sorcery/"; + info->summary = "sorcery object apply handler unit test"; + info->description = + "Test object set apply handler call in sorcery"; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + if (!(sorcery = ast_sorcery_open())) { + ast_test_status_update(test, "Failed to open sorcery structure\n"); + return AST_TEST_FAIL; + } + + if (ast_sorcery_apply_default(sorcery, "test", "memory", NULL) || + ast_sorcery_object_register(sorcery, "test", test_sorcery_object_alloc, NULL, test_apply_handler)) { + ast_test_status_update(test, "Failed to register 'test' object type\n"); + return AST_TEST_FAIL; + } + + ast_sorcery_object_field_register(sorcery, "test", "bob", "5", OPT_UINT_T, 0, FLDSET(struct test_sorcery_object, bob)); + ast_sorcery_object_field_register(sorcery, "test", "joe", "10", OPT_UINT_T, 0, FLDSET(struct test_sorcery_object, joe)); + + if (!(obj = ast_sorcery_alloc(sorcery, "test", "blah"))) { + ast_test_status_update(test, "Failed to allocate a known object type\n"); + return AST_TEST_FAIL; + } + + apply_handler_called = 0; + + if (!(objset = ast_variable_new("joe", "25", ""))) { + ast_test_status_update(test, "Failed to create an object set, test could not occur\n"); + res = AST_TEST_FAIL; + } else if (ast_sorcery_objectset_apply(sorcery, obj, objset)) { + ast_test_status_update(test, "Failed to apply valid object set to object\n"); + res = AST_TEST_FAIL; + } else if (!apply_handler_called) { + ast_test_status_update(test, "Apply handler was not called when it should have been\n"); + res = AST_TEST_FAIL; + } + + return res; +} + AST_TEST_DEFINE(objectset_apply_invalid) { RAII_VAR(struct ast_sorcery *, sorcery, NULL, ast_sorcery_unref); @@ -1886,6 +1949,7 @@ static int unload_module(void) AST_TEST_UNREGISTER(object_diff); AST_TEST_UNREGISTER(objectset_create); AST_TEST_UNREGISTER(objectset_apply); + AST_TEST_UNREGISTER(objectset_apply_handler); AST_TEST_UNREGISTER(objectset_apply_invalid); AST_TEST_UNREGISTER(objectset_transform); AST_TEST_UNREGISTER(changeset_create); @@ -1924,6 +1988,7 @@ static int load_module(void) AST_TEST_REGISTER(object_diff); AST_TEST_REGISTER(objectset_create); AST_TEST_REGISTER(objectset_apply); + AST_TEST_REGISTER(objectset_apply_handler); AST_TEST_REGISTER(objectset_apply_invalid); AST_TEST_REGISTER(objectset_transform); AST_TEST_REGISTER(changeset_create); |