summaryrefslogtreecommitdiff
path: root/tests/test_sorcery_realtime.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2014-03-07 21:23:39 +0000
committerMark Michelson <mmichelson@digium.com>2014-03-07 21:23:39 +0000
commitc162101d6937babbccc6ec49f8d6ff85d51af9f9 (patch)
tree741dc5dda8a8c39af456c905d8c2679fab316310 /tests/test_sorcery_realtime.c
parentfeae552139d2617117d1c5c5a80d36b60e6e86fc (diff)
Make res_sorcery_realtime filter unknown retrieved results.
When retrieving data from a database or other realtime backend, it's quite possible to retrieve variables that Asterisk does not care about but that are legitimate to exist. Asterisk does not need to throw a hissy fit when these variables are encountered but rather just filter them out. Review: https://reviewboard.asterisk.org/r/3305 ........ Merged revisions 410187 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'tests/test_sorcery_realtime.c')
-rw-r--r--tests/test_sorcery_realtime.c106
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;
}