mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-18 18:58:22 +00:00
Just a couple of Stasis-HTTP nitpick fixes.
* Fixed crash when res_stasis_http is unloaded before the implementation modules. * Cleaned up test initialization for test_stasis_http.so. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@386928 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -241,14 +241,17 @@ int stasis_http_add_handler(struct stasis_rest_handlers *handler)
|
|||||||
int stasis_http_remove_handler(struct stasis_rest_handlers *handler)
|
int stasis_http_remove_handler(struct stasis_rest_handlers *handler)
|
||||||
{
|
{
|
||||||
RAII_VAR(struct stasis_rest_handlers *, new_handler, NULL, ao2_cleanup);
|
RAII_VAR(struct stasis_rest_handlers *, new_handler, NULL, ao2_cleanup);
|
||||||
size_t old_size, new_size, i, j;
|
size_t size, i, j;
|
||||||
|
|
||||||
SCOPED_MUTEX(lock, &root_handler_lock);
|
if (!root_handler) {
|
||||||
old_size = sizeof(*new_handler) +
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ast_mutex_lock(&root_handler_lock);
|
||||||
|
size = sizeof(*new_handler) +
|
||||||
root_handler->num_children * sizeof(handler);
|
root_handler->num_children * sizeof(handler);
|
||||||
new_size = old_size - sizeof(handler);
|
|
||||||
|
|
||||||
new_handler = ao2_alloc(new_size, NULL);
|
new_handler = ao2_alloc(size, NULL);
|
||||||
if (!new_handler) {
|
if (!new_handler) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -265,6 +268,7 @@ int stasis_http_remove_handler(struct stasis_rest_handlers *handler)
|
|||||||
ao2_cleanup(root_handler);
|
ao2_cleanup(root_handler);
|
||||||
ao2_ref(new_handler, +1);
|
ao2_ref(new_handler, +1);
|
||||||
root_handler = new_handler;
|
root_handler = new_handler;
|
||||||
|
ast_mutex_unlock(&root_handler_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -899,6 +903,7 @@ static int unload_module(void)
|
|||||||
ao2_global_obj_release(confs);
|
ao2_global_obj_release(confs);
|
||||||
|
|
||||||
ao2_cleanup(root_handler);
|
ao2_cleanup(root_handler);
|
||||||
|
root_handler = NULL;
|
||||||
ast_mutex_destroy(&root_handler_lock);
|
ast_mutex_destroy(&root_handler_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -164,6 +164,9 @@ static struct stasis_http_response *response_alloc(void)
|
|||||||
*/
|
*/
|
||||||
static void response_free(struct stasis_http_response *resp)
|
static void response_free(struct stasis_http_response *resp)
|
||||||
{
|
{
|
||||||
|
if (!resp) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
ast_free(resp->headers);
|
ast_free(resp->headers);
|
||||||
ast_json_unref(resp->message);
|
ast_json_unref(resp->message);
|
||||||
ast_free(resp);
|
ast_free(resp);
|
||||||
@@ -178,7 +181,7 @@ static void *setup_invocation_test(void) {
|
|||||||
invocation_count = 0;
|
invocation_count = 0;
|
||||||
r = stasis_http_add_handler(&test_root);
|
r = stasis_http_add_handler(&test_root);
|
||||||
ast_assert(r == 0);
|
ast_assert(r == 0);
|
||||||
return NULL;
|
return &invocation_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -186,13 +189,16 @@ static void *setup_invocation_test(void) {
|
|||||||
* Tear down test fixture for invocation tests.
|
* Tear down test fixture for invocation tests.
|
||||||
*/
|
*/
|
||||||
static void tear_down_invocation_test(void *ignore) {
|
static void tear_down_invocation_test(void *ignore) {
|
||||||
|
if (!ignore) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
stasis_http_remove_handler(&test_root);
|
stasis_http_remove_handler(&test_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AST_TEST_DEFINE(get_docs)
|
AST_TEST_DEFINE(get_docs)
|
||||||
{
|
{
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
RAII_VAR(struct ast_variable *, headers, NULL, ast_variables_destroy);
|
RAII_VAR(struct ast_variable *, headers, NULL, ast_variables_destroy);
|
||||||
struct ast_json *basePathJson;
|
struct ast_json *basePathJson;
|
||||||
const char *basePath;
|
const char *basePath;
|
||||||
@@ -208,6 +214,7 @@ AST_TEST_DEFINE(get_docs)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = response_alloc();
|
||||||
headers = ast_variable_new("Host", "stasis.asterisk.org", __FILE__);
|
headers = ast_variable_new("Host", "stasis.asterisk.org", __FILE__);
|
||||||
stasis_http_get_docs("resources.json", headers, response);
|
stasis_http_get_docs("resources.json", headers, response);
|
||||||
ast_test_validate(test, 200 == response->response_code);
|
ast_test_validate(test, 200 == response->response_code);
|
||||||
@@ -223,7 +230,7 @@ AST_TEST_DEFINE(get_docs)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(get_docs_nohost)
|
AST_TEST_DEFINE(get_docs_nohost)
|
||||||
{
|
{
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
struct ast_json *basePathJson;
|
struct ast_json *basePathJson;
|
||||||
|
|
||||||
@@ -238,6 +245,7 @@ AST_TEST_DEFINE(get_docs_nohost)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = response_alloc();
|
||||||
stasis_http_get_docs("resources.json", headers, response);
|
stasis_http_get_docs("resources.json", headers, response);
|
||||||
ast_test_validate(test, 200 == response->response_code);
|
ast_test_validate(test, 200 == response->response_code);
|
||||||
|
|
||||||
@@ -250,7 +258,7 @@ AST_TEST_DEFINE(get_docs_nohost)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(get_docs_notfound)
|
AST_TEST_DEFINE(get_docs_notfound)
|
||||||
{
|
{
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
@@ -264,6 +272,7 @@ AST_TEST_DEFINE(get_docs_notfound)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = response_alloc();
|
||||||
stasis_http_get_docs("i-am-not-a-resource.json", headers, response);
|
stasis_http_get_docs("i-am-not-a-resource.json", headers, response);
|
||||||
ast_test_validate(test, 404 == response->response_code);
|
ast_test_validate(test, 404 == response->response_code);
|
||||||
|
|
||||||
@@ -272,7 +281,7 @@ AST_TEST_DEFINE(get_docs_notfound)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(get_docs_hackerz)
|
AST_TEST_DEFINE(get_docs_hackerz)
|
||||||
{
|
{
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
@@ -286,6 +295,7 @@ AST_TEST_DEFINE(get_docs_hackerz)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = response_alloc();
|
||||||
stasis_http_get_docs("../../../../sbin/asterisk", headers, response);
|
stasis_http_get_docs("../../../../sbin/asterisk", headers, response);
|
||||||
ast_test_validate(test, 404 == response->response_code);
|
ast_test_validate(test, 404 == response->response_code);
|
||||||
|
|
||||||
@@ -294,8 +304,8 @@ AST_TEST_DEFINE(get_docs_hackerz)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_get)
|
AST_TEST_DEFINE(invoke_get)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
@@ -311,6 +321,8 @@ AST_TEST_DEFINE(invoke_get)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
get_params = ast_variable_new("get1", "get-one", __FILE__);
|
get_params = ast_variable_new("get1", "get-one", __FILE__);
|
||||||
ast_assert(get_params != NULL);
|
ast_assert(get_params != NULL);
|
||||||
get_params->next = ast_variable_new("get2", "get-two", __FILE__);
|
get_params->next = ast_variable_new("get2", "get-two", __FILE__);
|
||||||
@@ -342,8 +354,8 @@ AST_TEST_DEFINE(invoke_get)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_wildcard)
|
AST_TEST_DEFINE(invoke_wildcard)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
@@ -359,6 +371,8 @@ AST_TEST_DEFINE(invoke_wildcard)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
expected = ast_json_pack("{s: s, s: {}, s: {}, s: {s: s}}",
|
expected = ast_json_pack("{s: s, s: {}, s: {}, s: {s: s}}",
|
||||||
"name", "bam_get",
|
"name", "bam_get",
|
||||||
"get_params",
|
"get_params",
|
||||||
@@ -377,8 +391,8 @@ AST_TEST_DEFINE(invoke_wildcard)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_delete)
|
AST_TEST_DEFINE(invoke_delete)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
@@ -394,6 +408,8 @@ AST_TEST_DEFINE(invoke_delete)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
expected = ast_json_pack("{s: s, s: {}, s: {}, s: {s: s}}",
|
expected = ast_json_pack("{s: s, s: {}, s: {}, s: {s: s}}",
|
||||||
"name", "bang_delete",
|
"name", "bang_delete",
|
||||||
"get_params",
|
"get_params",
|
||||||
@@ -412,8 +428,8 @@ AST_TEST_DEFINE(invoke_delete)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_post)
|
AST_TEST_DEFINE(invoke_post)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
@@ -429,6 +445,8 @@ AST_TEST_DEFINE(invoke_post)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
get_params = ast_variable_new("get1", "get-one", __FILE__);
|
get_params = ast_variable_new("get1", "get-one", __FILE__);
|
||||||
ast_assert(get_params != NULL);
|
ast_assert(get_params != NULL);
|
||||||
get_params->next = ast_variable_new("get2", "get-two", __FILE__);
|
get_params->next = ast_variable_new("get2", "get-two", __FILE__);
|
||||||
@@ -460,8 +478,8 @@ AST_TEST_DEFINE(invoke_post)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_bad_post)
|
AST_TEST_DEFINE(invoke_bad_post)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
|
|
||||||
@@ -476,6 +494,8 @@ AST_TEST_DEFINE(invoke_bad_post)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
stasis_http_invoke("foo", AST_HTTP_POST, get_params, headers, response);
|
stasis_http_invoke("foo", AST_HTTP_POST, get_params, headers, response);
|
||||||
|
|
||||||
ast_test_validate(test, 0 == invocation_count);
|
ast_test_validate(test, 0 == invocation_count);
|
||||||
@@ -486,8 +506,8 @@ AST_TEST_DEFINE(invoke_bad_post)
|
|||||||
|
|
||||||
AST_TEST_DEFINE(invoke_not_found)
|
AST_TEST_DEFINE(invoke_not_found)
|
||||||
{
|
{
|
||||||
RAII_VAR(void *, fixture, setup_invocation_test(), tear_down_invocation_test);
|
RAII_VAR(void *, fixture, NULL, tear_down_invocation_test);
|
||||||
RAII_VAR(struct stasis_http_response *, response, response_alloc(), response_free);
|
RAII_VAR(struct stasis_http_response *, response, NULL, response_free);
|
||||||
struct ast_variable *get_params = NULL;
|
struct ast_variable *get_params = NULL;
|
||||||
struct ast_variable *headers = NULL;
|
struct ast_variable *headers = NULL;
|
||||||
|
|
||||||
@@ -502,6 +522,8 @@ AST_TEST_DEFINE(invoke_not_found)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixture = setup_invocation_test();
|
||||||
|
response = response_alloc();
|
||||||
stasis_http_invoke("foo/fizzle/i-am-not-a-resource", AST_HTTP_GET, get_params, headers, response);
|
stasis_http_invoke("foo/fizzle/i-am-not-a-resource", AST_HTTP_GET, get_params, headers, response);
|
||||||
|
|
||||||
ast_test_validate(test, 0 == invocation_count);
|
ast_test_validate(test, 0 == invocation_count);
|
||||||
|
Reference in New Issue
Block a user