2 * Asterisk -- An open source telephony toolkit.
4 * Copyright (C) 2010, David Vossel
6 * David Vossel <dvossel@digium.com>
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.
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.
21 * \brief Device State Test Module
23 * \author\verbatim David Vossel <dvossel@digium.com> \endverbatim
29 <depend>TEST_FRAMEWORK</depend>
34 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
36 #include "asterisk/utils.h"
37 #include "asterisk/module.h"
38 #include "asterisk/test.h"
39 #include "asterisk/devicestate.h"
40 #include "asterisk/pbx.h"
43 /* These arrays are the result of the 'core show device2extenstate' output. */
44 static int combined_results[] = {
50 AST_DEVICE_UNAVAILABLE,
86 AST_DEVICE_UNAVAILABLE,
90 AST_DEVICE_UNAVAILABLE,
94 AST_DEVICE_UNAVAILABLE,
95 AST_DEVICE_UNAVAILABLE,
101 AST_DEVICE_RINGINUSE,
102 AST_DEVICE_RINGINUSE,
106 AST_DEVICE_RINGINUSE,
107 AST_DEVICE_RINGINUSE,
108 AST_DEVICE_RINGINUSE,
109 AST_DEVICE_RINGINUSE,
110 AST_DEVICE_RINGINUSE,
111 AST_DEVICE_RINGINUSE,
112 AST_DEVICE_RINGINUSE,
113 AST_DEVICE_RINGINUSE,
114 AST_DEVICE_RINGINUSE,
115 AST_DEVICE_RINGINUSE,
116 AST_DEVICE_RINGINUSE,
123 AST_DEVICE_RINGINUSE,
124 AST_DEVICE_RINGINUSE,
128 static int exten_results[] = {
129 AST_EXTENSION_UNAVAILABLE,
130 AST_EXTENSION_NOT_INUSE,
133 AST_EXTENSION_UNAVAILABLE,
134 AST_EXTENSION_UNAVAILABLE,
135 AST_EXTENSION_RINGING,
136 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
137 AST_EXTENSION_ONHOLD,
138 AST_EXTENSION_NOT_INUSE,
139 AST_EXTENSION_NOT_INUSE,
142 AST_EXTENSION_NOT_INUSE,
143 AST_EXTENSION_NOT_INUSE,
144 AST_EXTENSION_RINGING,
145 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
146 AST_EXTENSION_ONHOLD,
153 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
154 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
162 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
163 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
165 AST_EXTENSION_UNAVAILABLE,
166 AST_EXTENSION_NOT_INUSE,
169 AST_EXTENSION_UNAVAILABLE,
170 AST_EXTENSION_UNAVAILABLE,
171 AST_EXTENSION_RINGING,
172 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
173 AST_EXTENSION_ONHOLD,
174 AST_EXTENSION_UNAVAILABLE,
175 AST_EXTENSION_NOT_INUSE,
178 AST_EXTENSION_UNAVAILABLE,
179 AST_EXTENSION_UNAVAILABLE,
180 AST_EXTENSION_RINGING,
181 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
182 AST_EXTENSION_ONHOLD,
183 AST_EXTENSION_RINGING,
184 AST_EXTENSION_RINGING,
185 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
186 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
187 AST_EXTENSION_RINGING,
188 AST_EXTENSION_RINGING,
189 AST_EXTENSION_RINGING,
190 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
191 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
192 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
193 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
194 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
195 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
196 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
197 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
198 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
199 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
200 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
201 AST_EXTENSION_ONHOLD,
202 AST_EXTENSION_ONHOLD,
205 AST_EXTENSION_ONHOLD,
206 AST_EXTENSION_ONHOLD,
207 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
208 AST_EXTENSION_INUSE | AST_EXTENSION_RINGING,
209 AST_EXTENSION_ONHOLD,
212 AST_TEST_DEFINE(device2extenstate_test)
214 int res = AST_TEST_PASS;
215 struct ast_devstate_aggregate agg;
216 enum ast_device_state i, j, combined;
217 enum ast_extension_states exten;
222 info->name = "device2extenstate_test";
223 info->category = "main/devstate/";
224 info->summary = "Tests combined devstate mapping and device to extension state mapping.";
226 "Verifies device state aggregate results match the expected combined "
227 "devstate. Then verifies the combined devstate maps to the expected "
229 return AST_TEST_NOT_RUN;
234 if (ARRAY_LEN(exten_results) != (AST_DEVICE_TOTAL * AST_DEVICE_TOTAL)) {
235 ast_test_status_update(test, "Result array is %d long when it should be %d. "
236 "Something has changed, this test must be updated.\n",
237 (int) ARRAY_LEN(exten_results), (AST_DEVICE_TOTAL * AST_DEVICE_TOTAL));
238 return AST_TEST_FAIL;
241 if (ARRAY_LEN(combined_results) != ARRAY_LEN(exten_results)) {
242 ast_test_status_update(test, "combined_results and exten_results arrays do not match in length.\n");
243 return AST_TEST_FAIL;
246 for (i = 0; i < AST_DEVICE_TOTAL; i++) {
247 for (j = 0; j < AST_DEVICE_TOTAL; j++) {
248 ast_devstate_aggregate_init(&agg);
249 ast_devstate_aggregate_add(&agg, i);
250 ast_devstate_aggregate_add(&agg, j);
251 combined = ast_devstate_aggregate_result(&agg);
252 if (combined_results[k] != combined) {
253 ast_test_status_update(test, "Expected combined dev state %s "
254 "does not match %s at combined_result[%d].\n",
255 ast_devstate2str(combined_results[k]),
256 ast_devstate2str(combined), k);
260 exten = ast_devstate_to_extenstate(combined);
262 if (exten_results[k] != exten) {
263 ast_test_status_update(test, "Expected exten state %s "
264 "does not match %s at exten_result[%d]\n",
265 ast_extension_state2str(exten_results[k]),
266 ast_extension_state2str(exten), k);
276 static int unload_module(void)
278 AST_TEST_UNREGISTER(device2extenstate_test);
282 static int load_module(void)
284 AST_TEST_REGISTER(device2extenstate_test);
285 return AST_MODULE_LOAD_SUCCESS;
288 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Device State Test");