Asterisk - The Open Source Telephony Project GIT-master-f36a736
test_event.c
Go to the documentation of this file.
1/*
2 * Asterisk -- An open source telephony toolkit.
3 *
4 * Copyright (C) 2010, Digium, Inc.
5 *
6 * Russell Bryant <russell@digium.com>
7 *
8 * See http://www.asterisk.org for more information about
9 * the Asterisk project. Please do not directly contact
10 * any of the maintainers of this project for assistance;
11 * the project provides a web site, mailing lists and IRC
12 * channels for your use.
13 *
14 * This program is free software, distributed under the terms of
15 * the GNU General Public License Version 2. See the LICENSE file
16 * at the top of the source tree.
17 */
18
19/*!
20 * \file
21 * \brief Tests for the ast_event API
22 *
23 * \author Russell Bryant <russell@digium.com>
24 *
25 * \ingroup tests
26 *
27 * \todo API Calls not yet touched by a test: XXX TODO
28 * - ast_event_get_ie_type_name()
29 * - ast_event_get_ie_pltype()
30 * - ast_event_iterator_init()
31 * - ast_event_iterator_next()
32 * - ast_event_iterator_get_ie_type()
33 * - ast_event_iterator_get_ie_uint()
34 * - ast_event_iterator_get_ie_str()
35 */
36
37/*** MODULEINFO
38 <depend>TEST_FRAMEWORK</depend>
39 <support_level>core</support_level>
40 ***/
41
42#include "asterisk.h"
43
44#include "asterisk/module.h"
45#include "asterisk/utils.h"
46#include "asterisk/test.h"
47#include "asterisk/event.h"
48
49static int check_event(struct ast_event *event, struct ast_test *test,
50 enum ast_event_type expected_type, const char *type_name,
51 const char *str, uint32_t uint)
52{
54 const void *foo;
55
56 /* Check #1: Ensure event type is set properly. */
59 ast_test_status_update(test, "Expected event type: '%u', got '%u'\n",
60 expected_type, type);
61 return -1;
62 }
63
64 /* Check #4: Check for the string IE */
66 ast_test_status_update(test, "Failed to get string IE.\n");
67 return -1;
68 }
69
70 /* Check #5: Check for the uint IE */
72 ast_test_status_update(test, "Failed to get uint IE.\n");
73 return -1;
74 }
75
76 /* Check #6: Check if a check for a str IE that isn't there works */
78 ast_test_status_update(test, "CEL_CIDNAME IE check returned non-NULL %p\n", foo);
79 return -1;
80 }
81
82 /* Check #7: Check if a check for a uint IE that isn't there returns 0 */
84 ast_test_status_update(test, "UNIQUEID IE should be 0\n");
85 return -1;
86 }
87
88 ast_test_status_update(test, "Event looks good.\n");
89
90 return 0;
91}
92
93/*!
94 * \internal
95 */
96AST_TEST_DEFINE(event_new_test)
97{
99 struct ast_event *event = NULL, *event2 = NULL;
100
101 static const enum ast_event_type type = AST_EVENT_CUSTOM;
102 static const char str[] = "SIP/alligatormittens";
103 static const uint32_t uint = 0xb00bface;
104
105 switch (cmd) {
106 case TEST_INIT:
107 info->name = "ast_event_new_test";
108 info->category = "/main/event/";
109 info->summary = "Test event creation";
110 info->description =
111 "This test exercises the API calls that allow allocation "
112 "of an ast_event.";
113 return AST_TEST_NOT_RUN;
114 case TEST_EXECUTE:
115 break;
116 }
117
118 /*
119 * Test 2 methods of event creation:
120 *
121 * 1) Dynamic via appending each IE individually.
122 * 2) Statically, with all IEs in ast_event_new().
123 */
124
125 ast_test_status_update(test, "First, test dynamic event creation...\n");
126
128 ast_test_status_update(test, "Failed to allocate ast_event object.\n");
129 res = AST_TEST_FAIL;
130 goto return_cleanup;
131 }
132
134 ast_test_status_update(test, "Failed to append str IE\n");
135 res = AST_TEST_FAIL;
136 goto return_cleanup;
137 }
138
140 ast_test_status_update(test, "Failed to append uint IE\n");
141 res = AST_TEST_FAIL;
142 goto return_cleanup;
143 }
144
145 if (check_event(event, test, type, "Custom", str, uint)) {
146 ast_test_status_update(test, "Dynamically generated event broken\n");
147 res = AST_TEST_FAIL;
148 goto return_cleanup;
149 }
150
151 event2 = ast_event_new(type,
155
156 if (!event2) {
157 ast_test_status_update(test, "Failed to allocate ast_event object.\n");
158 res = AST_TEST_FAIL;
159 goto return_cleanup;
160 }
161
162 if (check_event(event2, test, type, "Custom", str, uint)) {
163 ast_test_status_update(test, "Statically generated event broken\n");
164 res = AST_TEST_FAIL;
165 goto return_cleanup;
166 }
167
169 ast_test_status_update(test, "Events expected to be identical have different size: %d != %d\n",
171 (int) ast_event_get_size(event2));
172 res = AST_TEST_FAIL;
173 goto return_cleanup;
174 }
175
176return_cleanup:
177 if (event) {
179 event = NULL;
180 }
181
182 if (event2) {
183 ast_event_destroy(event2);
184 event2 = NULL;
185 }
186
187 return res;
188}
189
191 unsigned int count;
192};
193
194static int unload_module(void)
195{
196 AST_TEST_UNREGISTER(event_new_test);
197
198 return 0;
199}
200
201static int load_module(void)
202{
203 AST_TEST_REGISTER(event_new_test);
204
206}
207
const char * str
Definition: app_jack.c:147
Asterisk main include file. File version handling, generic pbx functions.
static const char type[]
Definition: chan_ooh323.c:109
struct ast_event * ast_event_new(enum ast_event_type event_type,...)
Create a new event.
Definition: event.c:403
size_t ast_event_get_size(const struct ast_event *event)
Get the size of an event.
Definition: event.c:229
uint32_t ast_event_get_ie_uint(const struct ast_event *event, enum ast_event_ie_type ie_type)
Get the value of an information element that has an integer payload.
Definition: event.c:294
void ast_event_destroy(struct ast_event *event)
Destroy an event.
Definition: event.c:525
int ast_event_append_ie_str(struct ast_event **event, enum ast_event_ie_type ie_type, const char *str)
Append an information element that has a string payload.
Definition: event.c:346
const char * ast_event_get_ie_str(const struct ast_event *event, enum ast_event_ie_type ie_type)
Get the value of an information element that has a string payload.
Definition: event.c:303
enum ast_event_type ast_event_get_type(const struct ast_event *event)
Get the type for an event.
Definition: event.c:289
int ast_event_append_ie_uint(struct ast_event **event, enum ast_event_ie_type ie_type, uint32_t data)
Append an information element that has an integer payload.
Definition: event.c:361
@ AST_EVENT_IE_END
Definition: event_defs.h:70
@ AST_EVENT_IE_CEL_CIDNAME
Channel Event CID name Used by: AST_EVENT_CEL Payload type: STR.
Definition: event_defs.h:157
@ AST_EVENT_IE_CEL_AMAFLAGS
Channel Event AMA flags Used by: AST_EVENT_CEL Payload type: UINT.
Definition: event_defs.h:199
@ AST_EVENT_IE_CEL_USEREVENT_NAME
Channel Event User Event Name Used by: AST_EVENT_CEL Payload type: STR.
Definition: event_defs.h:151
@ AST_EVENT_IE_CEL_EVENT_TIME_USEC
Channel Event Time (micro-seconds) Used by: AST_EVENT_CEL Payload type: UINT.
Definition: event_defs.h:145
ast_event_type
Definition: event_defs.h:28
@ AST_EVENT_CUSTOM
Definition: event_defs.h:36
@ AST_EVENT_IE_PLTYPE_UINT
Definition: event_defs.h:333
@ AST_EVENT_IE_PLTYPE_STR
Definition: event_defs.h:335
Asterisk module definitions.
#define AST_MODULE_INFO_STANDARD(keystr, desc)
Definition: module.h:581
#define ASTERISK_GPL_KEY
The text the key() function should return.
Definition: module.h:46
@ AST_MODULE_LOAD_SUCCESS
Definition: module.h:70
def info(msg)
#define NULL
Definition: resample.c:96
An event.
Definition: event.c:81
unsigned int count
Definition: test_event.c:191
Definition: astman.c:222
Test Framework API.
@ TEST_INIT
Definition: test.h:200
@ TEST_EXECUTE
Definition: test.h:201
#define AST_TEST_REGISTER(cb)
Definition: test.h:127
#define ast_test_status_update(a, b, c...)
Definition: test.h:129
#define AST_TEST_UNREGISTER(cb)
Definition: test.h:128
ast_test_result_state
Definition: test.h:193
@ AST_TEST_PASS
Definition: test.h:195
@ AST_TEST_FAIL
Definition: test.h:196
@ AST_TEST_NOT_RUN
Definition: test.h:194
static int check_event(struct ast_event *event, struct ast_test *test, enum ast_event_type expected_type, const char *type_name, const char *str, uint32_t uint)
Definition: test_event.c:49
static int load_module(void)
Definition: test_event.c:201
static int unload_module(void)
Definition: test_event.c:194
AST_TEST_DEFINE(event_new_test)
Definition: test_event.c:96
Utility functions.