diff options
author | David M. Lee <dlee@digium.com> | 2013-04-15 16:43:47 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-04-15 16:43:47 +0000 |
commit | c599aca553a57335267406b93c856e53c5e14db4 (patch) | |
tree | c1f8055e6cfc0cf5f1b6aeec5c9ec860ce6236cc /tests/test_res_stasis.c | |
parent | 2450722f52401b8537e9c0ffb1192f38b7dd146d (diff) |
Moved core logic from app_stasis to res_stasis
After some discussion on asterisk-dev, it was decided that the bulk of
the logic in app_stasis actually belongs in a resource module instead
of the application module.
This patch does that, leaves the app specific stuff in app_stasis, and
fixes up everything else to be consistent with that change.
* Renamed test_app_stasis to test_res_stasis
* Renamed app_stasis.h to stasis_app.h
* This is still stasis application support, even though it's no
longer in an app_ module. The name should never have been tied to
the type of module, anyways.
* Now that json isn't a resource module anymore, moved the
ast_channel_snapshot_to_json function to main/stasis_channels.c,
where it makes more sense.
Review: https://reviewboard.asterisk.org/r/2430/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@385742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'tests/test_res_stasis.c')
-rw-r--r-- | tests/test_res_stasis.c | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/tests/test_res_stasis.c b/tests/test_res_stasis.c new file mode 100644 index 000000000..0e7daf5dd --- /dev/null +++ b/tests/test_res_stasis.c @@ -0,0 +1,194 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2013, Digium, Inc. + * + * David M. Lee, II <dlee@digium.com> + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! + * \file \brief Test Stasis Application API. + * \author\verbatim David M. Lee, II <dlee@digium.com> \endverbatim + * + * \ingroup tests + */ + +/*** MODULEINFO + <depend>TEST_FRAMEWORK</depend> + <depend>res_stasis</depend> + <support_level>core</support_level> + ***/ + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/module.h" +#include "asterisk/test.h" +#include "asterisk/stasis_app.h" + +static const char *test_category = "/stasis/res/"; + +AST_TEST_DEFINE(app_invoke_dne) +{ + int res; + + switch (cmd) { + case TEST_INIT: + info->name = __func__; + info->category = test_category; + info->summary = "Test stasis app invocation."; + info->description = "Test stasis app invocation."; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + res = stasis_app_send("i-am-not-an-app", ast_json_null()); + ast_test_validate(test, -1 == res); + + return AST_TEST_PASS; +} + +struct app_data { + int invocations; + struct ast_json *messages; +}; + +static void app_data_dtor(void *obj) +{ + struct app_data *actual = obj; + + ast_json_unref(actual->messages); + actual->messages = NULL; +} + +static struct app_data *app_data_create(void) +{ + struct app_data *res = ao2_alloc(sizeof(struct app_data), app_data_dtor); + + if (!res) { + return NULL; + } + + res->messages = ast_json_array_create(); + return res; +} + +static void test_handler(void *data, const char *app_name, struct ast_json *message) +{ + struct app_data *actual = data; + int res; + ++(actual->invocations); + res = ast_json_array_append(actual->messages, ast_json_copy(message)); + ast_assert(res == 0); +} + +AST_TEST_DEFINE(app_invoke_one) +{ + RAII_VAR(struct app_data *, app_data, NULL, ao2_cleanup); + RAII_VAR(char *, app_name, NULL, stasis_app_unregister); + RAII_VAR(struct ast_json *, expected_message, NULL, ast_json_unref); + RAII_VAR(struct ast_json *, message, NULL, ast_json_unref); + int res; + + switch (cmd) { + case TEST_INIT: + info->name = __func__; + info->category = test_category; + info->summary = "Test stasis app invocation."; + info->description = "Test stasis app invocation."; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + app_name = "test-handler"; + + app_data = app_data_create(); + + stasis_app_register(app_name, test_handler, app_data); + message = ast_json_pack("{ s: o }", "test-message", ast_json_null()); + expected_message = ast_json_pack("[o]", ast_json_ref(message)); + + res = stasis_app_send(app_name, message); + ast_test_validate(test, 0 == res); + ast_test_validate(test, 1 == app_data->invocations); + ast_test_validate(test, ast_json_equal(expected_message, app_data->messages)); + + return AST_TEST_PASS; +} + +AST_TEST_DEFINE(app_replaced) +{ + RAII_VAR(struct app_data *, app_data1, NULL, ao2_cleanup); + RAII_VAR(struct app_data *, app_data2, NULL, ao2_cleanup); + RAII_VAR(char *, app_name, NULL, stasis_app_unregister); + RAII_VAR(struct ast_json *, expected_message1, NULL, ast_json_unref); + RAII_VAR(struct ast_json *, message, NULL, ast_json_unref); + RAII_VAR(struct ast_json *, expected_message2, NULL, ast_json_unref); + int res; + + switch (cmd) { + case TEST_INIT: + info->name = __func__; + info->category = test_category; + info->summary = "Test stasis app invocation."; + info->description = "Test stasis app invocation."; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + app_name = "test-handler"; + + app_data1 = app_data_create(); + app_data2 = app_data_create(); + + stasis_app_register(app_name, test_handler, app_data1); + stasis_app_register(app_name, test_handler, app_data2); + expected_message1 = ast_json_pack("[{s: {}}]", "application-replaced"); + message = ast_json_pack("{ s: o }", "test-message", ast_json_null()); + expected_message2 = ast_json_pack("[o]", ast_json_ref(message)); + + res = stasis_app_send(app_name, message); + ast_test_validate(test, 0 == res); + ast_test_validate(test, 1 == app_data1->invocations); + ast_test_validate(test, ast_json_equal(expected_message1, app_data1->messages)); + ast_test_validate(test, 1 == app_data2->invocations); + ast_test_validate(test, ast_json_equal(expected_message2, app_data2->messages)); + + return AST_TEST_PASS; +} + +static int unload_module(void) +{ + AST_TEST_UNREGISTER(app_invoke_dne); + AST_TEST_UNREGISTER(app_invoke_one); + AST_TEST_UNREGISTER(app_replaced); + return 0; +} + +static int load_module(void) +{ + AST_TEST_REGISTER(app_replaced); + AST_TEST_REGISTER(app_invoke_one); + AST_TEST_REGISTER(app_invoke_dne); + return AST_MODULE_LOAD_SUCCESS; +} + +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Stasis Core testing", + .load = load_module, + .unload = unload_module, + .nonoptreq = "res_stasis", + ); |