diff options
author | George Joseph <george.joseph@fairview5.com> | 2014-11-21 17:49:39 +0000 |
---|---|---|
committer | George Joseph <george.joseph@fairview5.com> | 2014-11-21 17:49:39 +0000 |
commit | 4394e0431c81e80741273e4f3f63be4137716ff5 (patch) | |
tree | c53b605fe5fe54bb7d2d8768d476bff8f64b7437 /tests/test_sorcery.c | |
parent | d663e045f5613ba5b0620a3bb6f3f0fe0c35b1dc (diff) |
sorcery: Make is_object_field_registered handle field names that are regexes.
As a result of https://reviewboard.asterisk.org/r/3305, res_sorcery_realtime
was tossing database fields that didn't have an exact match to a sorcery
registered field. This broke the ability to use regexes as field names which
manifested itself as a failure of res_pjsip_phoneprov_provider which uses
this capability. It also broke handling of fields that start with '@' in
realtime but I don't think anyone noticed.
This patch does the following...
* Modifies ast_sorcery_fields_register to pre-compile the name regex.
* Modifies ast_sorcery_is_object_field_registered to test the regex if it
exists instead of doing an exact strcmp.
* Modifies res_pjsip_phoneprov_provider with a few tweaks to get it to work
with realtime.
Tested-by: George Joseph
Review: https://reviewboard.asterisk.org/r/4185/
........
Merged revisions 428543 from http://svn.asterisk.org/svn/asterisk/branches/12
........
Merged revisions 428544 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'tests/test_sorcery.c')
-rw-r--r-- | tests/test_sorcery.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/test_sorcery.c b/tests/test_sorcery.c index cbdec0ce1..8873b10f0 100644 --- a/tests/test_sorcery.c +++ b/tests/test_sorcery.c @@ -2995,6 +2995,48 @@ AST_TEST_DEFINE(dialplan_function) return AST_TEST_PASS; } +AST_TEST_DEFINE(object_field_registered) +{ + RAII_VAR(struct ast_sorcery *, sorcery, NULL, ast_sorcery_unref); + RAII_VAR(struct ast_sorcery_object_type *, object_type, NULL, ao2_cleanup); + + switch (cmd) { + case TEST_INIT: + info->name = "object_field_registered"; + info->category = "/main/sorcery/"; + info->summary = "ast_sorcery_is_object_field_registered unit test"; + info->description = + "Test ast_sorcery_is_object_field_registered in sorcery"; + 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; + } + + object_type = ast_sorcery_get_object_type(sorcery, "test"); + + ast_sorcery_object_fields_register(sorcery, "test", "^prefix/.", test_sorcery_regex_handler, test_sorcery_regex_fields); + + ast_test_validate(test, ast_sorcery_is_object_field_registered(object_type, "joe")); + ast_test_validate(test, ast_sorcery_is_object_field_registered(object_type, "bob")); + ast_test_validate(test, ast_sorcery_is_object_field_registered(object_type, "@joebob")); + ast_test_validate(test, ast_sorcery_is_object_field_registered(object_type, "prefix/goober")); + + ast_test_validate(test, !ast_sorcery_is_object_field_registered(object_type, "joebob")); + ast_test_validate(test, !ast_sorcery_is_object_field_registered(object_type, "prefix/")); + ast_test_validate(test, !ast_sorcery_is_object_field_registered(object_type, "goober")); + + ast_sorcery_object_fields_register(sorcery, "test", "^", test_sorcery_regex_handler, test_sorcery_regex_fields); + + ast_test_validate(test, ast_sorcery_is_object_field_registered(object_type, "goober")); + + return AST_TEST_PASS; +} + static int unload_module(void) { AST_TEST_UNREGISTER(wizard_registration); @@ -3041,6 +3083,8 @@ static int unload_module(void) AST_TEST_UNREGISTER(configuration_file_wizard_retrieve_multiple); AST_TEST_UNREGISTER(configuration_file_wizard_retrieve_multiple_all); AST_TEST_UNREGISTER(dialplan_function); + AST_TEST_UNREGISTER(object_field_registered); + return 0; } @@ -3090,6 +3134,8 @@ static int load_module(void) AST_TEST_REGISTER(configuration_file_wizard_retrieve_multiple); AST_TEST_REGISTER(configuration_file_wizard_retrieve_multiple_all); AST_TEST_REGISTER(dialplan_function); + AST_TEST_REGISTER(object_field_registered); + return AST_MODULE_LOAD_SUCCESS; } |