[asterisk-commits] dlee: branch dlee/endpoints r387289 - in /team/dlee/endpoints: include/asteri...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed May 1 23:48:58 CDT 2013
Author: dlee
Date: Wed May 1 23:48:56 2013
New Revision: 387289
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=387289
Log:
Endpoint tests
Added:
team/dlee/endpoints/include/asterisk/stasis_test.h (with props)
team/dlee/endpoints/res/res_stasis_test.c (with props)
team/dlee/endpoints/res/res_stasis_test.exports.in (with props)
team/dlee/endpoints/tests/test_endpoints.c (with props)
team/dlee/endpoints/tests/test_stasis_endpoints.c (with props)
Modified:
team/dlee/endpoints/include/asterisk/endpoints.h
team/dlee/endpoints/main/endpoints.c
Modified: team/dlee/endpoints/include/asterisk/endpoints.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/include/asterisk/endpoints.h?view=diff&rev=387289&r1=387288&r2=387289
==============================================================================
--- team/dlee/endpoints/include/asterisk/endpoints.h (original)
+++ team/dlee/endpoints/include/asterisk/endpoints.h Wed May 1 23:48:56 2013
@@ -35,6 +35,11 @@
* creates channels, it can use ast_endpoint_add_channel() to associate channels
* to the endpoint. This updated the endpoint appropriately, and forwards all of
* the channel's events to the endpoint's topic.
+ *
+ * In order to avoid excessive locking on the endpoint object itself, the
+ * mutable state is not accessible via getters. Instead, you can create a
+ * snapshot using ast_endpoint_snapshot_create() to get a consistent snapshot of
+ * the internal state.
*/
#include "asterisk/json.h"
Added: team/dlee/endpoints/include/asterisk/stasis_test.h
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/include/asterisk/stasis_test.h?view=auto&rev=387289
==============================================================================
--- team/dlee/endpoints/include/asterisk/stasis_test.h (added)
+++ team/dlee/endpoints/include/asterisk/stasis_test.h Wed May 1 23:48:56 2013
@@ -1,0 +1,104 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013, Digium, Inc.
+ *
+ * David M. Lee, II <dlee at 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.
+ */
+
+#ifndef _ASTERISK_STASIS_TEST_H
+#define _ASTERISK_STASIS_TEST_H
+
+/*!
+ * \file \brief Test infrastructure for dealing with Stasis.
+ *
+ * \author David M. Lee, II <dlee at digium.com>
+ */
+
+#include "asterisk/lock.h"
+#include "asterisk/stasis.h"
+
+#define DEFAULT_WAIT_MILLIS 5000
+
+/*! \brief Structure that collects messages from a topic */
+struct stasis_message_sink {
+ /*! Condition mutex. */
+ ast_mutex_t lock;
+ /*! Condition to signal state changes */
+ ast_cond_t cond;
+ /*! Maximum number of messages messages field can hold without
+ * realloc */
+ size_t max_messages;
+ /*! Current number of messages in messages field. */
+ size_t num_messages;
+ /*! Boolean flag to be set when unsubscribe is received */
+ int is_done:1;
+ /*! Ordered array of messages received */
+ struct stasis_message **messages;
+};
+
+/*!
+ * \brief Create a message sink.
+ *
+ * This is an AO2 managed object, which you ao2_cleanup() when done. The
+ * destructor waits for an unsubscribe message to be received, to ensure the
+ * object isn't disposed of before the topic is finished.
+ */
+struct stasis_message_sink *stasis_message_sink_create(void);
+
+/*!
+ * \brief Topic callback to receive messages.
+ * See \ref stasis_subscription_cb
+ */
+void stasis_message_sink_cb(void *data, struct stasis_subscription *sub,
+ struct stasis_topic *topic, struct stasis_message *message);
+
+/*!
+ * \brief Wait for a sink's num_messages field to reach a certain level.
+ *
+ * The optional timeout prevents complete deadlock in a test.
+ *
+ * \param sink Sink to wait on.
+ * \param num_messages sink->num_messages value to wait for.
+ * \param timeout_millis Number of milliseconds to wait. -1 to wait forever.
+ * \return Actual sink->num_messages value at return.
+ * If this is < \a num_messages, then the timeout expired.
+ */
+int stasis_message_sink_wait_for(struct stasis_message_sink *sink,
+ int num_messages, int timeout_millis);
+
+/*!
+ * \brief Ensures that no new messages are received.
+ *
+ * The optional timeout prevents complete deadlock in a test.
+ *
+ * \param sink Sink to wait on.
+ * \param num_messages expecte \a sink->num_messages.
+ * \param timeout_millis Number of milliseconds to wait for.
+ * \return Actual sink->num_messages value at return.
+ * If this is < \a num_messages, then the timeout expired.
+ */
+int stasis_message_sink_should_stay(struct stasis_message_sink *sink,
+ int num_messages, int timeout_millis);
+
+/*!
+ * \brief Creates a test message.
+ */
+struct stasis_message *stasis_test_message_create(void);
+
+/*!
+ * \brief Gets the type of messages created by stasis_test_message_create().
+ */
+struct stasis_message_type *stasis_test_message_type(void);
+
+#endif /* _ASTERISK_STASIS_TEST_H */
Propchange: team/dlee/endpoints/include/asterisk/stasis_test.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/endpoints/include/asterisk/stasis_test.h
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/endpoints/include/asterisk/stasis_test.h
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: team/dlee/endpoints/main/endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/main/endpoints.c?view=diff&rev=387289&r1=387288&r2=387289
==============================================================================
--- team/dlee/endpoints/main/endpoints.c (original)
+++ team/dlee/endpoints/main/endpoints.c Wed May 1 23:48:56 2013
@@ -166,8 +166,15 @@
RAII_VAR(struct ast_endpoint *, endpoint, NULL, ao2_cleanup);
int r = 0;
- ast_assert(tech != NULL);
- ast_assert(resource != NULL);
+ if (ast_strlen_zero(tech)) {
+ ast_log(LOG_ERROR, "Endpoint tech cannot be empty\n");
+ return NULL;
+ }
+
+ if (ast_strlen_zero(resource)) {
+ ast_log(LOG_ERROR, "Endpoint resource cannot be empty\n");
+ return NULL;
+ }
ast_debug(3, "%s(%s, %s)\n", __func__, tech, resource);
@@ -232,7 +239,9 @@
{
RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
- ast_assert(endpoint != NULL);
+ if (endpoint == NULL) {
+ return;
+ }
message = stasis_cache_clear_create(ast_endpoint_snapshot_type(), endpoint->id);
if (message) {
Added: team/dlee/endpoints/res/res_stasis_test.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/res/res_stasis_test.c?view=auto&rev=387289
==============================================================================
--- team/dlee/endpoints/res/res_stasis_test.c (added)
+++ team/dlee/endpoints/res/res_stasis_test.c Wed May 1 23:48:56 2013
@@ -1,0 +1,210 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013, Digium, Inc.
+ *
+ * David M. Lee, II <dlee at 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 infrastructure for dealing with Stasis.
+ *
+ * \author David M. Lee, II <dlee at digium.com>
+ */
+
+/*** MODULEINFO
+ <depend>TEST_FRAMEWORK</depend>
+ <support_level>core</support_level>
+ ***/
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
+
+#include "asterisk/astobj2.h"
+#include "asterisk/module.h"
+#include "asterisk/stasis_test.h"
+
+static struct stasis_message_type *test_message_type;
+
+static void stasis_message_sink_dtor(void *obj)
+{
+ struct stasis_message_sink *sink = obj;
+
+ {
+ SCOPED_MUTEX(lock, &sink->lock);
+ while (!sink->is_done) {
+ /* Normally waiting forever is bad, but if we're not
+ * done, we're not done. */
+ ast_cond_wait(&sink->cond, &sink->lock);
+ }
+ }
+
+ ast_mutex_destroy(&sink->lock);
+ ast_cond_destroy(&sink->cond);
+
+ while (sink->num_messages > 0) {
+ ao2_cleanup(sink->messages[--sink->num_messages]);
+ }
+ ast_free(sink->messages);
+ sink->messages = NULL;
+ sink->max_messages = 0;
+}
+
+struct stasis_message_sink *stasis_message_sink_create(void)
+{
+ RAII_VAR(struct stasis_message_sink *, sink, NULL, ao2_cleanup);
+
+ sink = ao2_alloc(sizeof(*sink), stasis_message_sink_dtor);
+ if (!sink) {
+ return NULL;
+ }
+ ast_mutex_init(&sink->lock);
+ ast_cond_init(&sink->cond, NULL);
+ sink->max_messages = 4;
+ sink->messages =
+ ast_malloc(sizeof(*sink->messages) * sink->max_messages);
+ if (!sink->messages) {
+ return NULL;
+ }
+ ao2_ref(sink, +1);
+ return sink;
+}
+
+void stasis_message_sink_cb(void *data, struct stasis_subscription *sub,
+ struct stasis_topic *topic, struct stasis_message *message)
+{
+ struct stasis_message_sink *sink = data;
+
+ SCOPED_MUTEX(lock, &sink->lock);
+
+ if (sink->num_messages == sink->max_messages) {
+ size_t new_max_messages = sink->max_messages * 2;
+ struct stasis_message **new_messages = ast_realloc(
+ sink->messages,
+ sizeof(*new_messages) * new_max_messages);
+ if (!new_messages) {
+ return;
+ }
+ sink->max_messages = new_max_messages;
+ sink->messages = new_messages;
+ }
+
+ ao2_ref(message, +1);
+ sink->messages[sink->num_messages++] = message;
+
+ if (stasis_subscription_final_message(sub, message)) {
+ sink->is_done = 1;
+ }
+
+ ast_cond_signal(&sink->cond);
+}
+
+int stasis_message_sink_wait_for(struct stasis_message_sink *sink,
+ int num_messages, int timeout_millis)
+{
+ struct timeval start = ast_tvnow();
+ struct timeval delta = {
+ .tv_sec = timeout_millis / 1000,
+ .tv_usec = (timeout_millis % 1000) * 1000,
+ };
+ struct timeval deadline_tv = ast_tvadd(start, delta);
+ struct timespec deadline = {
+ .tv_sec = deadline_tv.tv_sec,
+ .tv_nsec = 1000 * deadline_tv.tv_usec,
+ };
+
+ SCOPED_MUTEX(lock, &sink->lock);
+ while (sink->num_messages < num_messages) {
+ int r = ast_cond_timedwait(&sink->cond, &sink->lock, &deadline);
+
+ if (r == ETIMEDOUT) {
+ break;
+ } else if (r != 0) {
+ ast_log(LOG_ERROR, "Unexpected condition error: %s\n",
+ strerror(r));
+ break;
+ }
+ }
+ return sink->num_messages;
+}
+
+int stasis_message_sink_should_stay(struct stasis_message_sink *sink,
+ int num_messages, int timeout_millis)
+{
+ struct timeval start = ast_tvnow();
+ struct timeval delta = ast_tv(0, 1000 * timeout_millis);
+ struct timeval deadline_tv = ast_tvadd(start, delta);
+ struct timespec deadline = {
+ .tv_sec = deadline_tv.tv_sec,
+ .tv_nsec = 1000 * deadline_tv.tv_usec,
+ };
+
+ SCOPED_MUTEX(lock, &sink->lock);
+ while (sink->num_messages == num_messages) {
+ int r = ast_cond_timedwait(&sink->cond, &sink->lock, &deadline);
+
+ if (r == ETIMEDOUT) {
+ break;
+ } else {
+ ast_log(LOG_ERROR, "Unexpected condition error: %s\n",
+ strerror(r));
+ break;
+ }
+ }
+ return sink->num_messages;
+}
+
+struct stasis_message *stasis_test_message_create(void)
+{
+ RAII_VAR(void *, data, NULL, ao2_cleanup);
+
+ /* We just need the unique pointer; don't care what's in it */
+ data = ao2_alloc(1, NULL);
+ if (!data) {
+ return NULL;
+ }
+
+ return stasis_message_create(stasis_test_message_type(), data);
+}
+
+struct stasis_message_type *stasis_test_message_type(void)
+{
+ return test_message_type;
+}
+
+static int unload_module(void)
+{
+ ao2_cleanup(stasis_test_message_type);
+ test_message_type = NULL;
+ return 0;
+}
+
+static int load_module(void)
+{
+ test_message_type = stasis_message_type_create(
+ "stasis_test_message");
+ if (!test_message_type) {
+ return AST_MODULE_LOAD_FAILURE;
+ }
+
+ return AST_MODULE_LOAD_SUCCESS;
+}
+
+AST_MODULE_INFO(ASTERISK_GPL_KEY,
+ AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER,
+ "Stasis test utilities",
+ .load = load_module,
+ .unload = unload_module,
+ .load_pri = AST_MODPRI_APP_DEPEND,
+ );
Propchange: team/dlee/endpoints/res/res_stasis_test.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/endpoints/res/res_stasis_test.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/endpoints/res/res_stasis_test.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: team/dlee/endpoints/res/res_stasis_test.exports.in
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/res/res_stasis_test.exports.in?view=auto&rev=387289
==============================================================================
--- team/dlee/endpoints/res/res_stasis_test.exports.in (added)
+++ team/dlee/endpoints/res/res_stasis_test.exports.in Wed May 1 23:48:56 2013
@@ -1,0 +1,6 @@
+{
+ global:
+ LINKER_SYMBOL_PREFIXstasis_*;
+ local:
+ *;
+};
Propchange: team/dlee/endpoints/res/res_stasis_test.exports.in
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/endpoints/res/res_stasis_test.exports.in
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/endpoints/res/res_stasis_test.exports.in
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: team/dlee/endpoints/tests/test_endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/tests/test_endpoints.c?view=auto&rev=387289
==============================================================================
--- team/dlee/endpoints/tests/test_endpoints.c (added)
+++ team/dlee/endpoints/tests/test_endpoints.c Wed May 1 23:48:56 2013
@@ -1,0 +1,158 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013, Digium, Inc.
+ *
+ * David M. Lee, II <dlee at 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 endpoints.
+ *
+ * \author\verbatim David M. Lee, II <dlee at digium.com> \endverbatim
+ *
+ * \ingroup tests
+ */
+
+/*** MODULEINFO
+ <depend>TEST_FRAMEWORK</depend>
+ <support_level>core</support_level>
+ ***/
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/astobj2.h"
+#include "asterisk/endpoints.h"
+#include "asterisk/module.h"
+#include "asterisk/stasis_endpoints.h"
+#include "asterisk/test.h"
+
+static const char *test_category = "/core/endpoints/";
+
+AST_TEST_DEFINE(create)
+{
+ RAII_VAR(struct ast_endpoint *, uut, NULL, ast_endpoint_shutdown);
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = __func__;
+ info->category = test_category;
+ info->summary = "Test endpoint creation";
+ info->description = "Test endpoint creation";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+
+ ast_test_validate(test, NULL == ast_endpoint_create(NULL, NULL));
+ ast_test_validate(test, NULL == ast_endpoint_create("", ""));
+ ast_test_validate(test, NULL == ast_endpoint_create("TEST", ""));
+ ast_test_validate(test, NULL == ast_endpoint_create("", "test_res"));
+
+ uut = ast_endpoint_create("TEST", "test_res");
+ ast_test_validate(test, NULL != uut);
+
+ ast_test_validate(test,
+ 0 == strcmp("TEST", ast_endpoint_get_tech(uut)));
+ ast_test_validate(test,
+ 0 == strcmp("test_res", ast_endpoint_get_resource(uut)));
+
+ return AST_TEST_PASS;
+}
+
+
+AST_TEST_DEFINE(defaults)
+{
+ RAII_VAR(struct ast_endpoint *, uut, NULL, ast_endpoint_shutdown);
+ RAII_VAR(struct ast_endpoint_snapshot *, snapshot, NULL, ao2_cleanup);
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = __func__;
+ info->category = test_category;
+ info->summary = "Test defaults for new endpoints";
+ info->description = "Test defaults for new endpoints";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+
+ uut = ast_endpoint_create("TEST", "test_res");
+ ast_test_validate(test, NULL != uut);
+ snapshot = ast_endpoint_snapshot_create(uut);
+ ast_test_validate(test, NULL != snapshot);
+
+ ast_test_validate(test, 0 == strcmp("TEST/test_res", snapshot->id));
+ ast_test_validate(test, 0 == strcmp("TEST", snapshot->tech));
+ ast_test_validate(test, 0 == strcmp("test_res", snapshot->resource));
+ ast_test_validate(test, AST_ENDPOINT_UNKNOWN == snapshot->state);
+ ast_test_validate(test, -1 == snapshot->max_channels);
+ ast_test_validate(test, 0 == snapshot->current_channels);
+
+ return AST_TEST_PASS;
+}
+
+AST_TEST_DEFINE(setters)
+{
+ RAII_VAR(struct ast_endpoint *, uut, NULL, ast_endpoint_shutdown);
+ RAII_VAR(struct ast_endpoint_snapshot *, snapshot, NULL, ao2_cleanup);
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = __func__;
+ info->category = test_category;
+ info->summary = "Test endpoint setters";
+ info->description = "Test endpoint setters";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+
+ uut = ast_endpoint_create("TEST", "test_res");
+ ast_test_validate(test, NULL != uut);
+
+ ast_endpoint_set_state(uut, AST_ENDPOINT_ONLINE);
+ ast_endpoint_set_max_channels(uut, 314159);
+
+ snapshot = ast_endpoint_snapshot_create(uut);
+ ast_test_validate(test, NULL != snapshot);
+
+ ast_test_validate(test, AST_ENDPOINT_ONLINE == snapshot->state);
+ ast_test_validate(test, 314159 == snapshot->max_channels);
+
+ return AST_TEST_PASS;
+}
+
+static int unload_module(void)
+{
+ AST_TEST_UNREGISTER(create);
+ AST_TEST_UNREGISTER(defaults);
+ AST_TEST_UNREGISTER(setters);
+ return 0;
+}
+
+static int load_module(void)
+{
+ AST_TEST_REGISTER(create);
+ AST_TEST_REGISTER(defaults);
+ AST_TEST_REGISTER(setters);
+ return AST_MODULE_LOAD_SUCCESS;
+}
+
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT,
+ "Endpoint testing",
+ .load = load_module,
+ .unload = unload_module,
+ );
Propchange: team/dlee/endpoints/tests/test_endpoints.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/endpoints/tests/test_endpoints.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/endpoints/tests/test_endpoints.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: team/dlee/endpoints/tests/test_stasis_endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/endpoints/tests/test_stasis_endpoints.c?view=auto&rev=387289
==============================================================================
--- team/dlee/endpoints/tests/test_stasis_endpoints.c (added)
+++ team/dlee/endpoints/tests/test_stasis_endpoints.c Wed May 1 23:48:56 2013
@@ -1,0 +1,116 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013, Digium, Inc.
+ *
+ * David M. Lee, II <dlee at 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 endpoints.
+ *
+ * \author\verbatim David M. Lee, II <dlee at digium.com> \endverbatim
+ *
+ * \ingroup tests
+ */
+
+/*** MODULEINFO
+ <depend>TEST_FRAMEWORK</depend>
+ <depend>res_stasis_test</depend>
+ <support_level>core</support_level>
+ ***/
+
+#include "asterisk.h"
+
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+
+#include "asterisk/astobj2.h"
+#include "asterisk/channel.h"
+#include "asterisk/endpoints.h"
+#include "asterisk/module.h"
+#include "asterisk/stasis_endpoints.h"
+#include "asterisk/stasis_test.h"
+#include "asterisk/test.h"
+
+static const char *test_category = "/stasis/endpoints/";
+
+static void safe_channel_release(struct ast_channel *chan)
+{
+ if (!chan) {
+ return;
+ }
+ ast_channel_release(chan);
+}
+
+AST_TEST_DEFINE(channel_messages)
+{
+ RAII_VAR(struct ast_endpoint *, uut, NULL, ast_endpoint_shutdown);
+ RAII_VAR(struct ast_channel *, chan, NULL, safe_channel_release);
+ RAII_VAR(struct ast_endpoint_snapshot *, snapshot, NULL, ao2_cleanup);
+ RAII_VAR(struct stasis_message_sink *, sink, NULL, ao2_cleanup);
+ RAII_VAR(struct stasis_subscription *, sub, NULL, stasis_unsubscribe);
+ int actual;
+
+ switch (cmd) {
+ case TEST_INIT:
+ info->name = __func__;
+ info->category = test_category;
+ info->summary = "Test endpoint setters";
+ info->description = "Test endpoint setters";
+ return AST_TEST_NOT_RUN;
+ case TEST_EXECUTE:
+ break;
+ }
+
+ uut = ast_endpoint_create("TEST", "test_res");
+ ast_test_validate(test, NULL != uut);
+
+ sink = stasis_message_sink_create();
+ ast_test_validate(test, NULL != sink);
+
+ sub = stasis_subscribe(ast_endpoint_topic(uut), stasis_message_sink_cb,
+ sink);
+
+ chan = ast_channel_alloc(0, AST_STATE_DOWN, "100", "test_res", "100",
+ "100", "default", NULL, 0, "TEST/test_res");
+ ast_test_validate(test, NULL != chan);
+
+ ast_endpoint_add_channel(uut, chan);
+
+ actual = stasis_message_sink_wait_for(sink, 2, DEFAULT_WAIT_MILLIS);
+ ast_test_validate(test, 2 == actual);
+
+ safe_channel_release(chan);
+ chan = NULL;
+
+ return AST_TEST_PASS;
+}
+
+static int unload_module(void)
+{
+ AST_TEST_UNREGISTER(channel_messages);
+ return 0;
+}
+
+static int load_module(void)
+{
+ AST_TEST_REGISTER(channel_messages);
+ return AST_MODULE_LOAD_SUCCESS;
+}
+
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT,
+ "Endpoint testing",
+ .load = load_module,
+ .unload = unload_module,
+ .nonoptreq = "res_stasis_test",
+ );
Propchange: team/dlee/endpoints/tests/test_stasis_endpoints.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/endpoints/tests/test_stasis_endpoints.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/endpoints/tests/test_stasis_endpoints.c
------------------------------------------------------------------------------
svn:mime-type = text/plain
More information about the asterisk-commits
mailing list