diff options
author | Jonathan Rose <jrose@digium.com> | 2015-03-06 21:38:36 +0000 |
---|---|---|
committer | Jonathan Rose <jrose@digium.com> | 2015-03-06 21:38:36 +0000 |
commit | b85cb7ea1b64471dde7eabafdc440e8baaba7655 (patch) | |
tree | c718f8ec2b1e42890c0c3f72ab3e85eb397b9984 /main/app.c | |
parent | c7cc1b3059509e95d17746348f8b390d7b1d988f (diff) |
app: Add functions to swap voicemail function table for testing purposes
........
Merged revisions 432556 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@432573 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/app.c')
-rw-r--r-- | main/app.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/main/app.c b/main/app.c index cd7078ea1..f3fc2980f 100644 --- a/main/app.c +++ b/main/app.c @@ -519,6 +519,57 @@ void ast_vm_unregister(const char *module_name) ao2_cleanup(table); } +#ifdef TEST_FRAMEWORK +/*! \brief Holding container for the voicemail provider used while testing */ +static AO2_GLOBAL_OBJ_STATIC(vm_provider_holder); +static int provider_is_swapped = 0; + +void ast_vm_test_swap_table_in(const struct ast_vm_functions *vm_table) +{ + RAII_VAR(struct ast_vm_functions *, holding_table, NULL, ao2_cleanup); + RAII_VAR(struct ast_vm_functions *, new_table, NULL, ao2_cleanup); + + if (provider_is_swapped) { + ast_log(LOG_ERROR, "Attempted to swap in test function table without swapping out old test table.\n"); + return; + } + + holding_table = ao2_global_obj_ref(vm_provider); + + if (holding_table) { + ao2_global_obj_replace_unref(vm_provider_holder, holding_table); + } + + new_table = ao2_alloc_options(sizeof(*new_table), NULL, AO2_ALLOC_OPT_LOCK_NOLOCK); + if (!new_table) { + return; + } + *new_table = *vm_table; + + ao2_global_obj_replace_unref(vm_provider, new_table); + provider_is_swapped = 1; +} + +void ast_vm_test_swap_table_out(void) +{ + RAII_VAR(struct ast_vm_functions *, held_table, NULL, ao2_cleanup); + + if (!provider_is_swapped) { + ast_log(LOG_ERROR, "Attempted to swap out test function table, but none is currently installed.\n"); + return; + } + + held_table = ao2_global_obj_ref(vm_provider_holder); + if (!held_table) { + return; + } + + ao2_global_obj_replace_unref(vm_provider, held_table); + ao2_global_obj_release(vm_provider_holder); + provider_is_swapped = 0; +} +#endif + /*! \brief The container for the voicemail greeter provider */ static AO2_GLOBAL_OBJ_STATIC(vm_greeter_provider); |