diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_sorcery_realtime.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/test_sorcery_realtime.c b/tests/test_sorcery_realtime.c index 8a2140bbc..a3642d4ec 100644 --- a/tests/test_sorcery_realtime.c +++ b/tests/test_sorcery_realtime.c @@ -753,6 +753,108 @@ AST_TEST_DEFINE(object_delete_uncreated) return AST_TEST_PASS; } +AST_TEST_DEFINE(object_allocate_on_retrieval) +{ + RAII_VAR(struct ast_sorcery *, sorcery, NULL, deinitialize_sorcery); + RAII_VAR(struct test_sorcery_object *, obj, NULL, ao2_cleanup); + struct ast_category *cat; + + switch (cmd) { + case TEST_INIT: + info->name = "object_allocate_on_retrieval"; + info->category = "/res/sorcery_realtime/"; + info->summary = "sorcery object allocation upon retrieval unit test"; + info->description = + "This test creates data in a realtime backend, not through sorcery. Sorcery is then\n" + "instructed to retrieve an object with the id of the object that was created in the\n" + "realtime backend. Sorcery should be able to allocate the object appropriately"; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + if (!(sorcery = alloc_and_initialize_sorcery())) { + ast_test_status_update(test, "Failed to open sorcery structure\n"); + return AST_TEST_FAIL; + } + + cat = ast_category_new("blah", "", 0); + ast_variable_append(cat, ast_variable_new("id", "blah", "")); + ast_variable_append(cat, ast_variable_new("bob", "42", "")); + ast_variable_append(cat, ast_variable_new("joe", "93", "")); + ast_category_append(realtime_objects, cat); + + if (!(obj = ast_sorcery_retrieve_by_id(sorcery, "test", "blah"))) { + ast_test_status_update(test, "Failed to allocate object 'blah' base on realtime data\n"); + return AST_TEST_FAIL; + } + + if (obj->bob != 42) { + ast_test_status_update(test, "Object's 'bob' field does not have expected value: %d != 42\n", + obj->bob); + return AST_TEST_FAIL; + } else if (obj->joe != 93) { + ast_test_status_update(test, "Object's 'joe' field does not have expected value: %d != 93\n", + obj->joe); + return AST_TEST_FAIL; + } + + return AST_TEST_PASS; +} + + +AST_TEST_DEFINE(object_filter) +{ + RAII_VAR(struct ast_sorcery *, sorcery, NULL, deinitialize_sorcery); + RAII_VAR(struct test_sorcery_object *, obj, NULL, ao2_cleanup); + struct ast_category *cat; + + switch (cmd) { + case TEST_INIT: + info->name = "object_filter"; + info->category = "/res/sorcery_realtime/"; + info->summary = "sorcery object field filter unit test"; + info->description = + "This test creates data in a realtime backend, not through sorcery. In addition to\n" + "the object fields that have been registered with sorcery, there is data in the\n" + "realtime backend that is unknown to sorcery. When sorcery attempts to retrieve\n" + "the object from the realtime backend, the data unknown to sorcery should be\n" + "filtered out of the returned objectset, and the object should be successfully\n" + "allocated by sorcery\n"; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + if (!(sorcery = alloc_and_initialize_sorcery())) { + ast_test_status_update(test, "Failed to open sorcery structure\n"); + return AST_TEST_FAIL; + } + + cat = ast_category_new("blah", "", 0); + ast_variable_append(cat, ast_variable_new("id", "blah", "")); + ast_variable_append(cat, ast_variable_new("bob", "42", "")); + ast_variable_append(cat, ast_variable_new("joe", "93", "")); + ast_variable_append(cat, ast_variable_new("fred", "50", "")); + ast_category_append(realtime_objects, cat); + + if (!(obj = ast_sorcery_retrieve_by_id(sorcery, "test", "blah"))) { + ast_test_status_update(test, "Failed to retrieve properly created object using id of 'blah'\n"); + return AST_TEST_FAIL; + } + + if (obj->bob != 42) { + ast_test_status_update(test, "Object's 'bob' field does not have expected value: %d != 42\n", + obj->bob); + return AST_TEST_FAIL; + } else if (obj->joe != 93) { + ast_test_status_update(test, "Object's 'joe' field does not have expected value: %d != 93\n", + obj->joe); + return AST_TEST_FAIL; + } + return AST_TEST_PASS; +} + static int unload_module(void) { ast_config_engine_deregister(&sorcery_config_engine); @@ -766,6 +868,8 @@ static int unload_module(void) AST_TEST_UNREGISTER(object_update_uncreated); AST_TEST_UNREGISTER(object_delete); AST_TEST_UNREGISTER(object_delete_uncreated); + AST_TEST_UNREGISTER(object_allocate_on_retrieval); + AST_TEST_UNREGISTER(object_filter); return 0; } @@ -784,6 +888,8 @@ static int load_module(void) AST_TEST_REGISTER(object_update_uncreated); AST_TEST_REGISTER(object_delete); AST_TEST_REGISTER(object_delete_uncreated); + AST_TEST_REGISTER(object_allocate_on_retrieval); + AST_TEST_REGISTER(object_filter); return AST_MODULE_LOAD_SUCCESS; } |