Asterisk - The Open Source Telephony Project GIT-master-b023714
Loading...
Searching...
No Matches
Macros | Functions | Variables
test_aeap_transaction.c File Reference
#include "asterisk.h"
#include <pthread.h>
#include "asterisk/lock.h"
#include "asterisk/test.h"
#include "asterisk/module.h"
#include "asterisk/res_aeap.h"
#include "asterisk/res_aeap_message.h"
#include "../res/res_aeap/general.h"
#include "../res/res_aeap/transaction.h"
Include dependency graph for test_aeap_transaction.c:

Go to the source code of this file.

Macros

#define AEAP_TRANSACTION_ID   "foo"
 
#define CATEGORY   "/res/aeap/transaction/"
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
 AST_TEST_DEFINE (transaction_exec)
 
 AST_TEST_DEFINE (transaction_exec_timeout)
 
static void * end_transaction (void *data)
 
static enum ast_test_result_state exec (struct ast_test *test, struct ast_aeap_tsx_params *params)
 
static void handle_timeout (struct ast_aeap *aeap, struct ast_aeap_message *msg, void *obj)
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Asterisk External Application Protocol Transaction Tests" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "res_aeap", }
 
static const struct ast_module_infoast_module_info = &__mod_info
 

Macro Definition Documentation

◆ AEAP_TRANSACTION_ID

#define AEAP_TRANSACTION_ID   "foo"

Definition at line 40 of file test_aeap_transaction.c.

◆ CATEGORY

#define CATEGORY   "/res/aeap/transaction/"

Definition at line 38 of file test_aeap_transaction.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 179 of file test_aeap_transaction.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 179 of file test_aeap_transaction.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 179 of file test_aeap_transaction.c.

◆ AST_TEST_DEFINE() [1/2]

AST_TEST_DEFINE ( transaction_exec  )

Definition at line 115 of file test_aeap_transaction.c.

116{
117 struct ast_aeap_tsx_params params = {
118 .timeout = 5000, /* Give plenty of time for test thread to end */
119 };
120
121 switch (cmd) {
122 case TEST_INIT:
123 info->name = __func__;
124 info->explicit_only = 0;
125 info->category = CATEGORY;
126 info->summary = "test creating a basic AEAP transaction request";
127 info->description = info->summary;
128 return AST_TEST_NOT_RUN;
129 case TEST_EXECUTE:
130 break;
131 }
132
133 return exec(test, &params);
134}
Parameters to be used when sending a transaction based message.
Definition res_aeap.h:331
@ TEST_INIT
Definition test.h:200
@ TEST_EXECUTE
Definition test.h:201
@ AST_TEST_NOT_RUN
Definition test.h:194
#define CATEGORY
static enum ast_test_result_state exec(struct ast_test *test, struct ast_aeap_tsx_params *params)

References AST_TEST_NOT_RUN, CATEGORY, exec(), TEST_EXECUTE, TEST_INIT, and ast_aeap_tsx_params::timeout.

◆ AST_TEST_DEFINE() [2/2]

AST_TEST_DEFINE ( transaction_exec_timeout  )

Definition at line 136 of file test_aeap_transaction.c.

137{
138 struct ast_aeap_tsx_params params = {
139 .timeout = 100, /* Ensure timeout occurs before test thread ends */
140 .on_timeout = handle_timeout,
141 };
142
143 switch (cmd) {
144 case TEST_INIT:
145 info->name = __func__;
146 info->explicit_only = 0;
147 info->category = CATEGORY;
148 info->summary = "test creating a AEAP transaction request that times out";
149 info->description = info->summary;
150 return AST_TEST_NOT_RUN;
151 case TEST_EXECUTE:
152 break;
153 }
154
155 return exec(test, &params);
156}
static void handle_timeout(struct ast_aeap *aeap, struct ast_aeap_message *msg, void *obj)

References AST_TEST_NOT_RUN, CATEGORY, exec(), handle_timeout(), TEST_EXECUTE, TEST_INIT, and ast_aeap_tsx_params::timeout.

◆ end_transaction()

static void * end_transaction ( void *  data)
static

Definition at line 49 of file test_aeap_transaction.c.

50{
51 /* Delay a second before ending transaction */
52 struct timespec delay = { 1, 0 };
53 int *passed = aeap_transaction_user_obj(data);
54
55 while (nanosleep(&delay, &delay));
56
57 ++*passed;
58 aeap_transaction_end(data, 0);
59
60 return NULL;
61}
#define NULL
Definition resample.c:96
void * aeap_transaction_user_obj(struct aeap_transaction *tsx)
Retrieve the user object associated with the transaction.
void aeap_transaction_end(struct aeap_transaction *tsx, int result)
End a transaction, and remove it from the given container.

References aeap_transaction_end(), aeap_transaction_user_obj(), and NULL.

Referenced by exec().

◆ exec()

static enum ast_test_result_state exec ( struct ast_test *  test,
struct ast_aeap_tsx_params params 
)
static

Definition at line 63 of file test_aeap_transaction.c.

65{
66 pthread_t thread_id = AST_PTHREADT_NULL;
67 struct ao2_container *tsxs = NULL;
68 struct aeap_transaction *tsx = NULL;
70 int passed = 0;
71
73 if (!tsxs) {
74 ast_test_status_update(test, "Failed to create transactions object\n");
75 goto exec_cleanup;
76 }
77
78 params->wait = 1;
79 params->obj = &passed;
80
82 if (!tsx) {
83 ast_test_status_update(test, "Failed to create transaction object\n");
84 goto exec_cleanup;
85 }
86
87 if (ast_pthread_create(&thread_id, NULL, end_transaction, ao2_bump(tsx))) {
88 ast_test_status_update(test, "Failed to create response thread\n");
89 ao2_ref(tsx, -1);
90 goto exec_cleanup;
91 }
92
93 if (aeap_transaction_start(tsx)) {
94 ast_test_status_update(test, "Failed to start transaction request\n");
95 goto exec_cleanup;
96 }
97
98 if (passed == 1) {
99 res = AST_TEST_PASS;
100 }
101
102exec_cleanup:
103
104 if (thread_id != AST_PTHREADT_NULL) {
105 pthread_cancel(thread_id);
106 pthread_join(thread_id, NULL);
107 }
108
109 aeap_transaction_end(tsx, 0);
110 ao2_cleanup(tsxs);
111
112 return res;
113}
#define ao2_cleanup(obj)
Definition astobj2.h:1934
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition astobj2.h:459
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
Definition astobj2.h:480
#define AST_PTHREADT_NULL
Definition lock.h:73
struct ast_aeap_tsx_params params
Definition transaction.c:46
Generic container type.
#define ast_test_status_update(a, b, c...)
Definition test.h:129
ast_test_result_state
Definition test.h:193
@ AST_TEST_PASS
Definition test.h:195
@ AST_TEST_FAIL
Definition test.h:196
static void * end_transaction(void *data)
#define AEAP_TRANSACTION_ID
struct ao2_container * aeap_transactions_create(void)
Create an Asterisk external application transactions container.
struct aeap_transaction * aeap_transaction_create_and_add(struct ao2_container *transactions, const char *id, struct ast_aeap_tsx_params *params, struct ast_aeap *aeap)
Create a transaction object, and add it to the given container.
int aeap_transaction_start(struct aeap_transaction *tsx)
Start the transaction.
#define ast_pthread_create(a, b, c, d)
Definition utils.h:621

References aeap_transaction_create_and_add(), aeap_transaction_end(), AEAP_TRANSACTION_ID, aeap_transaction_start(), aeap_transactions_create(), ao2_bump, ao2_cleanup, ao2_ref, ast_pthread_create, AST_PTHREADT_NULL, AST_TEST_FAIL, AST_TEST_PASS, ast_test_status_update, end_transaction(), NULL, ast_aeap_tsx_params::obj, aeap_transaction::params, and ast_aeap_tsx_params::wait.

Referenced by AST_TEST_DEFINE(), and AST_TEST_DEFINE().

◆ handle_timeout()

static void handle_timeout ( struct ast_aeap aeap,
struct ast_aeap_message msg,
void *  obj 
)
static

Definition at line 42 of file test_aeap_transaction.c.

43{
44 int *passed = obj;
45
46 ++*passed;
47}

Referenced by AST_TEST_DEFINE().

◆ load_module()

static int load_module ( void  )
static

Definition at line 158 of file test_aeap_transaction.c.

159{
160 AST_TEST_REGISTER(transaction_exec);
161 AST_TEST_REGISTER(transaction_exec_timeout);
162
164}
@ AST_MODULE_LOAD_SUCCESS
Definition module.h:70
#define AST_TEST_REGISTER(cb)
Definition test.h:127

References AST_MODULE_LOAD_SUCCESS, and AST_TEST_REGISTER.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 166 of file test_aeap_transaction.c.

167{
168 AST_TEST_UNREGISTER(transaction_exec_timeout);
169 AST_TEST_UNREGISTER(transaction_exec);
170
171 return 0;
172}
#define AST_TEST_UNREGISTER(cb)
Definition test.h:128

References AST_TEST_UNREGISTER.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Asterisk External Application Protocol Transaction Tests" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .requires = "res_aeap", }
static

Definition at line 179 of file test_aeap_transaction.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 179 of file test_aeap_transaction.c.