123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581 |
- #include "asterisk.h"
- ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
- #include <sys/stat.h>
- #include "asterisk/utils.h"
- #include "asterisk/module.h"
- #include "asterisk/test.h"
- #include "asterisk/paths.h"
- #include "asterisk/channel.h"
- #include "asterisk/app.h"
- #define VOICEMAIL_DIR_MODE 0777
- #define VOICEMAIL_FILE_MODE 0666
- #define TOTAL_SNAPSHOTS 4
- #define VM_API_TEST_SETUP do { \
- if (!ast_vm_is_registered()) { \
- ast_test_status_update(test, "No voicemail provider registered.\n"); \
- return AST_TEST_FAIL; \
- } else if (test_vm_api_test_setup()) { \
- VM_API_TEST_CLEANUP; \
- ast_test_status_update(test, "Failed to set up necessary mock objects for voicemail API test\n"); \
- return AST_TEST_FAIL; \
- } else { \
- int i = 0; \
- for (; i < TOTAL_SNAPSHOTS; i++) { \
- ast_test_status_update(test, "Created message in %s/%s with ID %s\n", \
- test_snapshots[i]->exten, test_snapshots[i]->folder_name, test_snapshots[i]->msg_id); \
- } \
- } } while (0)
- #define VM_API_TEST_CLEANUP test_vm_api_test_teardown()
- #define VM_API_SNAPSHOT_TEST_CLEANUP \
- if (test_mbox_snapshot) { \
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot); \
- } \
- VM_API_TEST_CLEANUP; \
- #define VM_API_STRING_FIELD_VERIFY(expected, actual) do { \
- if (strcmp((expected), (actual))) { \
- ast_test_status_update(test, "Test failed for parameter %s: Expected [%s], Actual [%s]\n", #actual, expected, actual); \
- VM_API_SNAPSHOT_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_INT_VERIFY(expected, actual) do { \
- if ((expected) != (actual)) { \
- ast_test_status_update(test, "Test failed for parameter %s: Expected [%d], Actual [%d]\n", #actual, (int)expected, (int)actual); \
- VM_API_SNAPSHOT_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_SNAPSHOT_MSG_VERIFY(expected, actual, expected_folder, expected_index) do { \
- struct ast_vm_msg_snapshot *msg; \
- int found = 0; \
- int counter = 0; \
- AST_LIST_TRAVERSE(&((actual)->snapshots[get_folder_by_name(expected_folder)]), msg, msg) { \
- if (!(strcmp(msg->msg_id, (expected)->msg_id))) { \
- ast_test_status_update(test, "Found message %s in snapshot\n", msg->msg_id); \
- found = 1; \
- if ((expected_index) != counter) { \
- ast_test_status_update(test, "Expected message %s at index %d; Actual [%d]\n", \
- (expected)->msg_id, (expected_index), counter); \
- VM_API_SNAPSHOT_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } \
- VM_API_STRING_FIELD_VERIFY((expected)->callerid, msg->callerid); \
- VM_API_STRING_FIELD_VERIFY((expected)->callerchan, msg->callerchan); \
- VM_API_STRING_FIELD_VERIFY((expected)->exten, msg->exten); \
- VM_API_STRING_FIELD_VERIFY((expected)->origdate, msg->origdate); \
- VM_API_STRING_FIELD_VERIFY((expected)->origtime, msg->origtime); \
- VM_API_STRING_FIELD_VERIFY((expected)->duration, msg->duration); \
- VM_API_STRING_FIELD_VERIFY((expected)->folder_name, msg->folder_name); \
- VM_API_STRING_FIELD_VERIFY((expected)->flag, msg->flag); \
- VM_API_INT_VERIFY((expected)->msg_number, msg->msg_number); \
- break; \
- } \
- ++counter; \
- } \
- if (!found) { \
- ast_test_status_update(test, "Test failed for message snapshot %s: not found in mailbox snapshot\n", (expected)->msg_id); \
- VM_API_SNAPSHOT_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_SNAPSHOT_CREATE(mailbox, context, folder, desc, sort, old_and_inbox) do { \
- if (!(test_mbox_snapshot = ast_vm_mailbox_snapshot_create( \
- (mailbox), (context), (folder), (desc), (sort), (old_and_inbox)))) { \
- ast_test_status_update(test, "Failed to create voicemail mailbox snapshot\n"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_SNAPSHOT_OFF_NOMINAL_TEST(mailbox, context, folder, desc, sort, old_and_inbox) do { \
- if ((test_mbox_snapshot = ast_vm_mailbox_snapshot_create( \
- (mailbox), (context), (folder), (desc), (sort), (old_and_inbox)))) { \
- ast_test_status_update(test, "Created mailbox snapshot when none was expected\n"); \
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_MOVE_MESSAGE(mailbox, context, number_of_messages, source, message_numbers_in, dest) do { \
- if (ast_vm_msg_move((mailbox), (context), (number_of_messages), (source), (message_numbers_in), (dest))) { \
- ast_test_status_update(test, "Failed to move message %s@%s from %s to %s\n", \
- (mailbox) ? (mailbox): "(NULL)", (context) ? (context) : "(NULL)", (source) ? (source) : "(NULL)", (dest) ? (dest) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_MOVE_MESSAGE_OFF_NOMINAL(mailbox, context, number_of_messages, source, message_numbers_in, dest) do { \
- if (!ast_vm_msg_move((mailbox), (context), (number_of_messages), (source), (message_numbers_in), (dest))) { \
- ast_test_status_update(test, "Succeeded to move message %s@%s from %s to %s when we really shouldn't\n", \
- (mailbox) ? (mailbox): "(NULL)", (context) ? (context) : "(NULL)", (source) ? (source) : "(NULL)", (dest) ? (dest) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_REMOVE_MESSAGE(mailbox, context, number_of_messages, folder, message_numbers_in) do { \
- if (ast_vm_msg_remove((mailbox), (context), (number_of_messages), (folder), (message_numbers_in))) { \
- ast_test_status_update(test, "Failed to remove message from mailbox %s@%s, folder %s", \
- (mailbox) ? (mailbox): "(NULL)", (context) ? (context) : "(NULL)", (folder) ? (folder) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } \
- VM_API_SNAPSHOT_CREATE((mailbox), (context), (folder), 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0); \
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 0); \
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot); \
- } while (0)
- #define VM_API_REMOVE_MESSAGE_OFF_NOMINAL(mailbox, context, number_of_messages, folder, message_numbers_in) do { \
- if (!ast_vm_msg_remove((mailbox), (context), (number_of_messages), (folder), (message_numbers_in))) { \
- ast_test_status_update(test, "Succeeded in removing message from mailbox %s@%s, folder %s, when expected result was failure\n", \
- (mailbox) ? (mailbox): "(NULL)", (context) ? (context) : "(NULL)", (folder) ? (folder) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- # define VM_API_FORWARD_MESSAGE(from_mailbox, from_context, from_folder, to_mailbox, to_context, to_folder, number_of_messages, message_numbers_in, delete_old) do { \
- if (ast_vm_msg_forward((from_mailbox), (from_context), (from_folder), (to_mailbox), (to_context), (to_folder), (number_of_messages), (message_numbers_in), (delete_old))) { \
- ast_test_status_update(test, "Failed to forward message from %s@%s [%s] to %s@%s [%s]\n", \
- (from_mailbox) ? (from_mailbox) : "(NULL)", (from_context) ? (from_context) : "(NULL)", (from_folder) ? (from_folder) : "(NULL)", \
- (to_mailbox) ? (to_mailbox) : "(NULL)", (to_context) ? (to_context) : "(NULL)", (to_folder) ? (to_folder) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_FORWARD_MESSAGE_OFF_NOMINAL(from_mailbox, from_context, from_folder, to_mailbox, to_context, to_folder, number_of_messages, message_numbers_in, delete_old) do { \
- if (!ast_vm_msg_forward((from_mailbox), (from_context), (from_folder), (to_mailbox), (to_context), (to_folder), (number_of_messages), (message_numbers_in), (delete_old))) { \
- ast_test_status_update(test, "Succeeded in forwarding message from %s@%s [%s] to %s@%s [%s] when expected result was fail\n", \
- (from_mailbox) ? (from_mailbox) : "(NULL)", (from_context) ? (from_context) : "(NULL)", (from_folder) ? (from_folder) : "(NULL)", \
- (to_mailbox) ? (to_mailbox) : "(NULL)", (to_context) ? (to_context) : "(NULL)", (to_folder) ? (to_folder) : "(NULL)"); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_PLAYBACK_MESSAGE(channel, mailbox, context, folder, message, callback_fn) do { \
- if (ast_vm_msg_play((channel), (mailbox), (context), (folder), (message), (callback_fn))) { \
- ast_test_status_update(test, "Failed nominal playback message test\n"); \
- ast_hangup(test_channel); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- #define VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(channel, mailbox, context, folder, message, callback_fn) do { \
- if (!ast_vm_msg_play((channel), (mailbox), (context), (folder), (message), (callback_fn))) { \
- ast_test_status_update(test, "Succeeded in playing back of message when expected result was to fail\n"); \
- ast_hangup(test_channel); \
- VM_API_TEST_CLEANUP; \
- return AST_TEST_FAIL; \
- } } while (0)
- static const char * const mailbox_folders[] = {
- "INBOX",
- "Old",
- "Work",
- "Family",
- "Friends",
- "Cust1",
- "Cust2",
- "Cust3",
- "Cust4",
- "Cust5",
- "Deleted",
- "Urgent",
- };
- static struct ast_vm_msg_snapshot *test_snapshots[TOTAL_SNAPSHOTS];
- static int global_entered_playback_callback = 0;
- static int get_folder_by_name(const char *folder)
- {
- size_t i;
- for (i = 0; i < ARRAY_LEN(mailbox_folders); i++) {
- if (strcasecmp(folder, mailbox_folders[i]) == 0) {
- return i;
- }
- }
- return -1;
- }
- static struct ast_vm_msg_snapshot *test_vm_api_create_mock_snapshot(const char *context, const char *exten, const char *callerid)
- {
- char msg_id_hash[AST_MAX_CONTEXT + AST_MAX_EXTENSION + sizeof(callerid) + 1];
- char msg_id_buf[256];
- struct ast_vm_msg_snapshot *snapshot;
- snprintf(msg_id_hash, sizeof(msg_id_hash), "%s%s%s", exten, context, callerid);
- snprintf(msg_id_buf, sizeof(msg_id_buf), "%ld-%d", (long)time(NULL), ast_str_hash(msg_id_hash));
- if ((snapshot = ast_calloc(1, sizeof(*snapshot)))) {
- if (ast_string_field_init(snapshot, 128)) {
- ast_free(snapshot);
- return NULL;
- }
- ast_string_field_set(snapshot, msg_id, msg_id_buf);
- ast_string_field_set(snapshot, exten, exten);
- ast_string_field_set(snapshot, callerid, callerid);
- }
- return snapshot;
- }
- static void test_vm_api_destroy_mock_snapshot(struct ast_vm_msg_snapshot *snapshot)
- {
- if (snapshot) {
- ast_string_field_free_memory(snapshot);
- ast_free(snapshot);
- }
- }
- static int test_vm_api_create_voicemail_folder(const char *folder_path)
- {
- mode_t mode = VOICEMAIL_DIR_MODE;
- int res;
- if ((res = ast_mkdir(folder_path, mode))) {
- ast_log(AST_LOG_ERROR, "ast_mkdir '%s' failed: %s\n", folder_path, strerror(res));
- return 1;
- }
- return 0;
- }
- static int test_vm_api_create_voicemail_files(const char *context, const char *mailbox, struct ast_vm_msg_snapshot *snapshot)
- {
- FILE *msg_file;
- char folder_path[PATH_MAX];
- char msg_path[PATH_MAX];
- char snd_path[PATH_MAX];
- char beep_path[PATH_MAX];
-
- snprintf(folder_path, sizeof(folder_path), "%s/voicemail/%s/%s/%s",
- ast_config_AST_SPOOL_DIR, context, mailbox, snapshot->folder_name);
- snprintf(msg_path, sizeof(msg_path), "%s/msg%04u.txt",
- folder_path, snapshot->msg_number);
- snprintf(snd_path, sizeof(snd_path), "%s/msg%04u.gsm",
- folder_path, snapshot->msg_number);
- snprintf(beep_path, sizeof(beep_path), "%s/sounds/en/beep.gsm", ast_config_AST_VAR_DIR);
- if (test_vm_api_create_voicemail_folder(folder_path)) {
- return 1;
- }
- if (ast_lock_path(folder_path) == AST_LOCK_FAILURE) {
- ast_log(AST_LOG_ERROR, "Unable to lock directory %s\n", folder_path);
- return 1;
- }
- if (symlink(beep_path, snd_path)) {
- ast_unlock_path(folder_path);
- ast_log(AST_LOG_ERROR, "Failed to create a symbolic link from %s to %s: %s\n",
- beep_path, snd_path, strerror(errno));
- return 1;
- }
- if (!(msg_file = fopen(msg_path, "w"))) {
-
- unlink(snd_path);
- ast_unlock_path(folder_path);
- ast_log(AST_LOG_ERROR, "Failed to open %s for writing\n", msg_path);
- return 1;
- }
- fprintf(msg_file, ";\n; Message Information file\n;\n"
- "[message]\n"
- "origmailbox=%s\n"
- "context=%s\n"
- "macrocontext=%s\n"
- "exten=%s\n"
- "rdnis=%s\n"
- "priority=%d\n"
- "callerchan=%s\n"
- "callerid=%s\n"
- "origdate=%s\n"
- "origtime=%s\n"
- "category=%s\n"
- "msg_id=%s\n"
- "flag=%s\n"
- "duration=%s\n",
- mailbox,
- context,
- "",
- snapshot->exten,
- "unknown",
- 1,
- snapshot->callerchan,
- snapshot->callerid,
- snapshot->origdate,
- snapshot->origtime,
- "",
- snapshot->msg_id,
- snapshot->flag,
- snapshot->duration);
- fclose(msg_file);
- if (chmod(msg_path, VOICEMAIL_FILE_MODE) < 0) {
- ast_unlock_path(folder_path);
- ast_log(AST_LOG_ERROR, "Couldn't set permissions on voicemail text file %s: %s", msg_path, strerror(errno));
- return 1;
- }
- ast_unlock_path(folder_path);
- return 0;
- }
- static void test_vm_api_remove_voicemail(struct ast_vm_msg_snapshot *snapshot)
- {
- char msg_path[PATH_MAX];
- char snd_path[PATH_MAX];
- char folder_path[PATH_MAX];
- if (!snapshot) {
- return;
- }
- snprintf(folder_path, sizeof(folder_path), "%s/voicemail/%s/%s/%s",
- ast_config_AST_SPOOL_DIR, "default", snapshot->exten, snapshot->folder_name);
- snprintf(msg_path, sizeof(msg_path), "%s/msg%04u.txt",
- folder_path, snapshot->msg_number);
- snprintf(snd_path, sizeof(snd_path), "%s/msg%04u.gsm",
- folder_path, snapshot->msg_number);
- unlink(msg_path);
- unlink(snd_path);
- return;
- }
- static void test_vm_api_destroy_mailbox_voicemails(const char *mailbox, struct ast_vm_mailbox_snapshot *mailbox_snapshot)
- {
- struct ast_vm_msg_snapshot *msg;
- int i;
- for (i = 0; i < 12; ++i) {
- AST_LIST_TRAVERSE(&mailbox_snapshot->snapshots[i], msg, msg) {
- ast_string_field_set(msg, exten, mailbox);
- test_vm_api_remove_voicemail(msg);
- }
- }
- }
- static void test_vm_api_remove_all_messages(void)
- {
- struct ast_vm_mailbox_snapshot *mailbox_snapshot;
-
- if ((mailbox_snapshot = ast_vm_mailbox_snapshot_create("test_vm_api_1234", "default", NULL, 0, AST_VM_SNAPSHOT_SORT_BY_ID, 0))) {
- test_vm_api_destroy_mailbox_voicemails("test_vm_api_1234", mailbox_snapshot);
- mailbox_snapshot = ast_vm_mailbox_snapshot_destroy(mailbox_snapshot);
- } else {
- ast_log(AST_LOG_WARNING, "Failed to create mailbox snapshot - could not remove test messages for test_vm_api_1234\n");
- }
- if ((mailbox_snapshot = ast_vm_mailbox_snapshot_create("test_vm_api_2345", "default", NULL, 0, AST_VM_SNAPSHOT_SORT_BY_ID, 0))) {
- test_vm_api_destroy_mailbox_voicemails("test_vm_api_2345", mailbox_snapshot);
- mailbox_snapshot = ast_vm_mailbox_snapshot_destroy(mailbox_snapshot);
- } else {
- ast_log(AST_LOG_WARNING, "Failed to create mailbox snapshot - could not remove test messages for test_vm_api_2345\n");
- }
- }
- static int test_vm_api_test_setup(void)
- {
- int i, res = 0;
- struct ast_vm_msg_snapshot *msg_one = NULL;
- struct ast_vm_msg_snapshot *msg_two = NULL;
- struct ast_vm_msg_snapshot *msg_three = NULL;
- struct ast_vm_msg_snapshot *msg_four = NULL;
-
- if ( !((msg_one = test_vm_api_create_mock_snapshot("default", "test_vm_api_1234", "\"Phil\" <2000>")))
- || !((msg_two = test_vm_api_create_mock_snapshot("default", "test_vm_api_1234", "\"Noel\" <8000>")))
- || !((msg_three = test_vm_api_create_mock_snapshot("default", "test_vm_api_2345", "\"Phil\" <2000>")))
- || !((msg_four = test_vm_api_create_mock_snapshot("default", "test_vm_api_2345", "\"Bill\" <3000>")))) {
- ast_log(AST_LOG_ERROR, "Failed to create mock snapshots for test\n");
- test_vm_api_destroy_mock_snapshot(msg_one);
- test_vm_api_destroy_mock_snapshot(msg_two);
- test_vm_api_destroy_mock_snapshot(msg_three);
- test_vm_api_destroy_mock_snapshot(msg_four);
- return 1;
- }
-
- if (ast_vm_test_create_user("default", "test_vm_api_1234")
- || ast_vm_test_create_user("default", "test_vm_api_2345")) {
- ast_log(AST_LOG_ERROR, "Failed to create test voicemail users\n");
- test_vm_api_destroy_mock_snapshot(msg_one);
- test_vm_api_destroy_mock_snapshot(msg_two);
- test_vm_api_destroy_mock_snapshot(msg_three);
- test_vm_api_destroy_mock_snapshot(msg_four);
-
- return 1;
- }
-
- test_vm_api_remove_all_messages();
-
- ast_string_field_set(msg_one, callerchan, "SIP/2000-00000000");
- ast_string_field_set(msg_one, origdate, "Mon Mar 19 04:14:21 PM UTC 2012");
- ast_string_field_set(msg_one, origtime, "1332173661");
- ast_string_field_set(msg_one, duration, "8");
- ast_string_field_set(msg_one, folder_name, "Old");
- msg_one->msg_number = 0;
- test_snapshots[0] = msg_one;
- ast_string_field_set(msg_two, callerchan, "SIP/8000-00000001");
- ast_string_field_set(msg_two, origdate, "Mon Mar 19 06:16:13 PM UTC 2012");
- ast_string_field_set(msg_two, origtime, "1332180973");
- ast_string_field_set(msg_two, duration, "24");
- ast_string_field_set(msg_two, folder_name, "INBOX");
- msg_two->msg_number = 0;
- test_snapshots[1] = msg_two;
- ast_string_field_set(msg_three, callerchan, "IAX/2000-000000a3");
- ast_string_field_set(msg_three, origdate, "Thu Mar 22 23:13:03 PM UTC 2012");
- ast_string_field_set(msg_three, origtime, "1332181251");
- ast_string_field_set(msg_three, duration, "25");
- ast_string_field_set(msg_three, folder_name, "INBOX");
- msg_three->msg_number = 0;
- test_snapshots[2] = msg_three;
- ast_string_field_set(msg_four, callerchan, "DAHDI/3000-00000010");
- ast_string_field_set(msg_four, origdate, "Fri Mar 23 03:01:03 AM UTC 2012");
- ast_string_field_set(msg_four, origtime, "1332181362");
- ast_string_field_set(msg_four, duration, "13");
- ast_string_field_set(msg_four, folder_name, "INBOX");
- msg_three->msg_number = 1;
- test_snapshots[3] = msg_four;
-
- for (i = 0; i < TOTAL_SNAPSHOTS; ++i) {
- if (test_vm_api_create_voicemail_files("default", test_snapshots[i]->exten, test_snapshots[i])) {
-
- ast_log(AST_LOG_ERROR, "Failed to store voicemail %s/%s\n",
- "default", test_snapshots[i]->exten);
- test_vm_api_destroy_mock_snapshot(test_snapshots[i]);
- test_snapshots[i] = NULL;
- res = 1;
- }
- }
- return res;
- }
- static void test_vm_api_test_teardown(void)
- {
- int i;
-
- for (i = 0; i < TOTAL_SNAPSHOTS; ++i) {
- test_vm_api_remove_voicemail(test_snapshots[i]);
- test_vm_api_destroy_mock_snapshot(test_snapshots[i]);
- test_snapshots[i] = NULL;
- }
- test_vm_api_remove_all_messages();
-
- ast_vm_test_destroy_user("default", "test_vm_api_1234");
- ast_vm_test_destroy_user("default", "test_vm_api_2345");
- }
- static void test_vm_api_update_test_snapshots(struct ast_vm_mailbox_snapshot *mailbox_snapshot)
- {
- int i, j;
- struct ast_vm_msg_snapshot *msg;
- for (i = 0; i < TOTAL_SNAPSHOTS; ++i) {
- for (j = 0; j < 12; ++j) {
- AST_LIST_TRAVERSE(&mailbox_snapshot->snapshots[j], msg, msg) {
- if (!strcmp(msg->msg_id, test_snapshots[i]->msg_id)) {
- ast_string_field_set(test_snapshots[i], callerid, msg->callerid);
- ast_string_field_set(test_snapshots[i], callerchan, msg->callerchan);
- ast_string_field_set(test_snapshots[i], exten, msg->exten);
- ast_string_field_set(test_snapshots[i], origdate, msg->origdate);
- ast_string_field_set(test_snapshots[i], origtime, msg->origtime);
- ast_string_field_set(test_snapshots[i], duration, msg->duration);
- ast_string_field_set(test_snapshots[i], folder_name, msg->folder_name);
- ast_string_field_set(test_snapshots[i], flag, msg->flag);
- test_snapshots[i]->msg_number = msg->msg_number;
- }
- }
- }
- }
- }
- static void message_playback_callback_fn(struct ast_channel *chan, const char *file, int duration)
- {
- if ((chan) && !ast_strlen_zero(file) && duration > 0) {
- global_entered_playback_callback = 1;
- } else {
- ast_log(AST_LOG_WARNING, "Entered into message playback callback function with invalid parameters\n");
- }
- }
- static int test_vm_api_mock_channel_write(struct ast_channel *chan, struct ast_frame *frame)
- {
- return 0;
- }
- static struct ast_frame *test_vm_api_mock_channel_read(struct ast_channel *chan)
- {
- return &ast_null_frame;
- }
- static const struct ast_channel_tech mock_channel_tech = {
- .write = test_vm_api_mock_channel_write,
- .read = test_vm_api_mock_channel_read,
- };
- static struct ast_channel *test_vm_api_create_mock_channel(void)
- {
- struct ast_channel *mock_channel;
- struct ast_format_cap *native_formats;
- if (!(mock_channel = ast_channel_alloc(0, AST_STATE_DOWN, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, "TestChannel"))) {
- return NULL;
- }
- ast_format_set(ast_channel_writeformat(mock_channel), AST_FORMAT_GSM, 0);
- native_formats = ast_channel_nativeformats(mock_channel);
- ast_format_cap_add(native_formats, ast_channel_writeformat(mock_channel));
- ast_format_set(ast_channel_rawwriteformat(mock_channel), AST_FORMAT_GSM, 0);
- ast_format_set(ast_channel_readformat(mock_channel), AST_FORMAT_GSM, 0);
- ast_format_set(ast_channel_rawreadformat(mock_channel), AST_FORMAT_GSM, 0);
- ast_channel_tech_set(mock_channel, &mock_channel_tech);
- ast_channel_unlock(mock_channel);
- return mock_channel;
- }
- AST_TEST_DEFINE(voicemail_api_nominal_snapshot)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- switch (cmd) {
- case TEST_INIT:
- info->name = "nominal_snapshot";
- info->category = "/main/voicemail_api/";
- info->summary = "Nominal mailbox snapshot tests";
- info->description =
- "Test retrieving mailbox snapshots";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- ast_test_status_update(test, "Test retrieving message 1 from INBOX of test_vm_1234\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(1, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0 from Old of test_vm_1234\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "Old", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(1, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "Old", 0);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0, 1 from Old and INBOX of test_vm_1234 ordered by time\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 1);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "INBOX", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 1);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 1, 0 from Old and INBOX of test_vm_1234 ordered by time desc\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 1, AST_VM_SNAPSHOT_SORT_BY_TIME, 1);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "INBOX", 1);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0, 1 from Old and INBOX of test_vm_1234 ordered by id\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_ID, 1);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "INBOX", 1);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 1, 0 from Old and INBOX of test_vm_1234 ordered by id desc\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 1, AST_VM_SNAPSHOT_SORT_BY_ID, 1);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "INBOX", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 1);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0, 1 from all folders of test_vm_1234 ordered by id\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", NULL, 0, AST_VM_SNAPSHOT_SORT_BY_ID, 0);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "Old", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0, 1 from all folders of test_vm_1234 ordered by time\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", NULL, 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "Old", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test retrieving message 0, 1 from all folders of test_vm_1234, default context ordered by time\n");
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", NULL, NULL, 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(2, test_mbox_snapshot->total_msg_num);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[0], test_mbox_snapshot, "Old", 0);
- VM_API_SNAPSHOT_MSG_VERIFY(test_snapshots[1], test_mbox_snapshot, "INBOX", 0);
- ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_off_nominal_snapshot)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- switch (cmd) {
- case TEST_INIT:
- info->name = "off_nominal_snapshot";
- info->category = "/main/voicemail_api/";
- info->summary = "Off nominal mailbox snapshot tests";
- info->description =
- "Test off nominal requests for mailbox snapshots. This includes"
- " testing the following:\n"
- " * Access to non-exisstent mailbox\n"
- " * Access to NULL mailbox\n"
- " * Access to non-existent context\n"
- " * Access to non-existent folder\n"
- " * Access to NULL folder\n"
- " * Invalid sort identifier\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- ast_test_status_update(test, "Test access to non-existent mailbox test_vm_api_3456\n");
- VM_API_SNAPSHOT_OFF_NOMINAL_TEST("test_vm_api_3456", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- ast_test_status_update(test, "Test access to null mailbox\n");
- VM_API_SNAPSHOT_OFF_NOMINAL_TEST(NULL, "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- ast_test_status_update(test, "Test access non-existent context test_vm_api_defunct\n");
- VM_API_SNAPSHOT_OFF_NOMINAL_TEST("test_vm_api_1234", "test_vm_api_defunct", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- ast_test_status_update(test, "Test non-existent folder test_vm_api_platypus\n");
- VM_API_SNAPSHOT_OFF_NOMINAL_TEST("test_vm_api_1234", "default", "test_vm_api_platypus", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_nominal_move)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- const char *inbox_msg_id;
- const char *old_msg_id;
- const char *multi_msg_ids[2];
- switch (cmd) {
- case TEST_INIT:
- info->name = "nominal_move";
- info->category = "/main/voicemail_api/";
- info->summary = "Nominal move voicemail tests";
- info->description =
- "Test nominal requests to move a voicemail to a different"
- " folder. This includes moving messages given a context,"
- " given a NULL context, and moving multiple messages";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- old_msg_id = test_snapshots[0]->msg_id;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[2]->msg_id;
- multi_msg_ids[1] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test move of test_vm_api_1234 message from INBOX to Family\n");
- VM_API_MOVE_MESSAGE("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move of test_vm_api_1234 message from Old to Family\n");
- VM_API_MOVE_MESSAGE("test_vm_api_1234", NULL, 1, "Old", &old_msg_id, "Family");
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "Family", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- test_vm_api_update_test_snapshots(test_mbox_snapshot);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_STRING_FIELD_VERIFY(test_snapshots[0]->folder_name, "Family");
- VM_API_STRING_FIELD_VERIFY(test_snapshots[1]->folder_name, "Family");
- VM_API_INT_VERIFY(test_snapshots[1]->msg_number, 0);
- VM_API_INT_VERIFY(test_snapshots[0]->msg_number, 1);
-
- ast_test_status_update(test, "Test move of test_vm_api_2345 messages from Inbox to Family\n");
- VM_API_MOVE_MESSAGE("test_vm_api_2345", "default", 2, "INBOX", multi_msg_ids, "Family");
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "Family", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- test_vm_api_update_test_snapshots(test_mbox_snapshot);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_STRING_FIELD_VERIFY(test_snapshots[2]->folder_name, "Family");
- VM_API_STRING_FIELD_VERIFY(test_snapshots[3]->folder_name, "Family");
- ast_test_status_update(test, "Test move of test_vm_api_2345 message from Family to INBOX\n");
- VM_API_MOVE_MESSAGE("test_vm_api_2345", "default", 2, "Family", multi_msg_ids, "INBOX");
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- test_vm_api_update_test_snapshots(test_mbox_snapshot);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_STRING_FIELD_VERIFY(test_snapshots[2]->folder_name, "INBOX");
- VM_API_STRING_FIELD_VERIFY(test_snapshots[3]->folder_name, "INBOX");
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_off_nominal_move)
- {
- const char *inbox_msg_id;
- const char *multi_msg_ids[4];
- switch (cmd) {
- case TEST_INIT:
- info->name = "off_nominal_move";
- info->category = "/main/voicemail_api/";
- info->summary = "Off nominal mailbox message move tests";
- info->description =
- "Test nominal requests to move a voicemail to a different"
- " folder. This includes testing the following:\n"
- " * Moving to a non-existent mailbox\n"
- " * Moving to a NULL mailbox\n"
- " * Moving to a non-existent context\n"
- " * Moving to/from non-existent folder\n"
- " * Moving to/from NULL folder\n"
- " * Invalid message identifier(s)\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[0]->msg_id;
- multi_msg_ids[1] = test_snapshots[1]->msg_id;
- multi_msg_ids[2] = test_snapshots[2]->msg_id;
- multi_msg_ids[3] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test move attempt for invalid mailbox test_vm_3456\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_3456", "default", 1, "INBOX", &inbox_msg_id, "Family");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL(NULL, "default", 1, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt for invalid context test_vm_api_defunct\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "test_vm_api_defunct", 1, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt to invalid folder\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id, "SPAMALOT");
- ast_test_status_update(test, "Test move attempt from invalid folder\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "MEATINACAN", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt to NULL folder\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id, NULL);
- ast_test_status_update(test, "Test move attempt from NULL folder\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, NULL, &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt with non-existent message number\n");
- inbox_msg_id = "6";
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt with invalid message number\n");
- inbox_msg_id = "";
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt with 0 number of messages\n");
- inbox_msg_id = test_snapshots[1]->msg_id;
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 0, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt with invalid number of messages\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", -30, "INBOX", &inbox_msg_id, "Family");
- ast_test_status_update(test, "Test move attempt with non-existent multiple messages, where some messages exist\n");
- VM_API_MOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 4, "INBOX", multi_msg_ids, "Family");
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_nominal_remove)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- const char *inbox_msg_id;
- const char *old_msg_id;
- const char *multi_msg_ids[2];
- switch (cmd) {
- case TEST_INIT:
- info->name = "nominal_remove";
- info->category = "/main/voicemail_api/";
- info->summary = "Nominal mailbox remove message tests";
- info->description =
- "Tests removing messages from voicemail folders. Includes"
- " both removing messages one at a time, and in a set";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- old_msg_id = test_snapshots[0]->msg_id;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[2]->msg_id;
- multi_msg_ids[1] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test removing a single message from INBOX\n");
- VM_API_REMOVE_MESSAGE("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message from Old\n");
- VM_API_REMOVE_MESSAGE("test_vm_api_1234", "default", 1, "Old", &old_msg_id);
- ast_test_status_update(test, "Test removing multiple messages from INBOX\n");
- VM_API_REMOVE_MESSAGE("test_vm_api_2345", "default", 2, "INBOX", multi_msg_ids);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_off_nominal_remove)
- {
- const char *inbox_msg_id;
- const char *multi_msg_ids[2];
- const char *empty_msg_ids[] = { };
- switch (cmd) {
- case TEST_INIT:
- info->name = "off_nominal_remove";
- info->category = "/main/voicemail_api/";
- info->summary = "Off nominal mailbox message removal tests";
- info->description =
- "Test off nominal requests for removing messages from "
- "a mailbox. This includes:\n"
- " * Removing messages with an invalid mailbox\n"
- " * Removing messages from a NULL mailbox\n"
- " * Removing messages from an invalid context\n"
- " * Removing messages from an invalid folder\n"
- " * Removing messages from a NULL folder\n"
- " * Removing messages with bad identifiers\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[2]->msg_id;
- multi_msg_ids[1] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test removing a single message with an invalid mailbox\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_3456", "default", 1, "INBOX", &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message with a NULL mailbox\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL(NULL, "default", 1, "INBOX", &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message with an invalid context\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "defunct", 1, "INBOX", &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message with an invalid folder\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "SPAMINACAN", &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message with a NULL folder\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, NULL, &inbox_msg_id);
- ast_test_status_update(test, "Test removing a single message with an invalid message number\n");
- inbox_msg_id = "POOPOO";
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 1, "INBOX", &inbox_msg_id);
- ast_test_status_update(test, "Test removing multiple messages with a single invalid message number\n");
- multi_msg_ids[1] = "POOPOO";
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_2345", "default", 2, "INBOX", multi_msg_ids);
- ast_test_status_update(test, "Test removing no messages with no message numbers\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", 0, "INBOX", empty_msg_ids);
- ast_test_status_update(test, "Test removing multiple messages with an invalid size specifier\n");
- VM_API_REMOVE_MESSAGE_OFF_NOMINAL("test_vm_api_2345", "default", -30, "INBOX", multi_msg_ids);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_nominal_forward)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- const char *inbox_msg_id;
- const char *multi_msg_ids[2];
- switch (cmd) {
- case TEST_INIT:
- info->name = "nominal_forward";
- info->category = "/main/voicemail_api/";
- info->summary = "Nominal message forward tests";
- info->description =
- "Tests the nominal cases of forwarding messages"
- " between mailboxes";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[2]->msg_id;
- multi_msg_ids[1] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test forwarding message 0 from test_vm_api_1234 INBOX to test_vm_api_2345 INBOX\n");
- VM_API_FORWARD_MESSAGE("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 1);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 3);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test forwarding message 0 from test_vm_api_1234 INBOX with default context to test_vm_api_2345 INBOX\n");
- VM_API_FORWARD_MESSAGE("test_vm_api_1234", NULL, "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 1);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 4);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test forwarding message 0 from test_vm_api_1234 INBOX to test_vm_api_2345 INBOX with default context\n");
- VM_API_FORWARD_MESSAGE("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", NULL, "INBOX", 1, &inbox_msg_id, 0);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 1);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 5);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test forwarding message 0 from test_vm_api_1234 INBOX to test_vm_api_2345 INBOX, deleting original\n");
- VM_API_FORWARD_MESSAGE("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", NULL, "INBOX", 1, &inbox_msg_id, 1);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 0);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 6);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test forwarding 2 messages from test_vm_api_2345 INBOX to test_vm_api_1234 INBOX");
- VM_API_FORWARD_MESSAGE("test_vm_api_2345", "default", "INBOX", "test_vm_api_1234", "default", "INBOX", 2, multi_msg_ids, 0);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 6);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 2);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_test_status_update(test, "Test forwarding 2 messages from test_vm_api_2345 INBOX to test_vm_api_1234 Family, deleting original\n");
- VM_API_FORWARD_MESSAGE("test_vm_api_2345", "default", "INBOX", "test_vm_api_1234", "default", "Family", 2, multi_msg_ids, 1);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "INBOX", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 4);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
-
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "Family", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 2);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_off_nominal_forward)
- {
- const char *inbox_msg_id;
- const char *multi_msg_ids[4];
- const char *empty_msg_ids[] = { };
- switch (cmd) {
- case TEST_INIT:
- info->name = "off_nominal_forward";
- info->category = "/main/voicemail_api/";
- info->summary = "Off nominal message forwarding tests";
- info->description =
- "Test off nominal forwarding of messages. This includes:\n"
- " * Invalid/NULL from mailbox\n"
- " * Invalid from context\n"
- " * Invalid/NULL from folder\n"
- " * Invalid/NULL to mailbox\n"
- " * Invalid to context\n"
- " * Invalid/NULL to folder\n"
- " * Invalid message numbers\n"
- " * Invalid number of messages\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- inbox_msg_id = test_snapshots[1]->msg_id;
- multi_msg_ids[0] = test_snapshots[0]->msg_id;
- multi_msg_ids[1] = test_snapshots[1]->msg_id;
- multi_msg_ids[2] = test_snapshots[2]->msg_id;
- multi_msg_ids[3] = test_snapshots[3]->msg_id;
- ast_test_status_update(test, "Test forwarding from an invalid mailbox\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_3456", "default", "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding from a NULL mailbox\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL(NULL, "default", "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding from an invalid context\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "defunct", "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding from an invalid folder\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "POTTEDMEAT", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding from a NULL folder\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", NULL, "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding to an invalid mailbox\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_3456", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding to a NULL mailbox\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", NULL, "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding to an invalid context\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "defunct", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding to an invalid folder\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", "POTTEDMEAT", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding to a NULL folder\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", NULL, 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding when no messages are select\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", "INBOX", 0, empty_msg_ids, 0);
- ast_test_status_update(test, "Test forwarding a message that doesn't exist\n");
- inbox_msg_id = "POOPOO";
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", "INBOX", 1, &inbox_msg_id, 0);
- ast_test_status_update(test, "Test forwarding multiple messages, where some messages don't exist\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_2345", "default", "INBOX", "test_vm_api_1234", "default", "INBOX", 4, multi_msg_ids, 0);
- ast_test_status_update(test, "Test forwarding a message with an invalid size specifier\n");
- VM_API_FORWARD_MESSAGE_OFF_NOMINAL("test_vm_api_1234", "default", "INBOX", "test_vm_api_2345", "default", "INBOX", -30, &inbox_msg_id, 0);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_nominal_msg_playback)
- {
- struct ast_vm_mailbox_snapshot *test_mbox_snapshot = NULL;
- struct ast_channel *test_channel;
- const char *message_id_1234;
- const char *message_id_2345[2];
- switch (cmd) {
- case TEST_INIT:
- info->name = "nominal_msg_playback";
- info->category = "/main/voicemail_api/";
- info->summary = "Nominal message playback";
- info->description =
- "Tests playing back a message on a provided"
- " channel or callback function\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- message_id_1234 = test_snapshots[1]->msg_id;
- message_id_2345[0] = test_snapshots[2]->msg_id;
- message_id_2345[1] = test_snapshots[3]->msg_id;
- if (!(test_channel = test_vm_api_create_mock_channel())) {
- ast_log(AST_LOG_ERROR, "Failed to create mock channel for testing\n");
- VM_API_TEST_CLEANUP;
- return AST_TEST_FAIL;
- }
- ast_test_status_update(test, "Playing back message from test_vm_api_1234 to mock channel\n");
- VM_API_PLAYBACK_MESSAGE(test_channel, "test_vm_api_1234", "default", "INBOX", message_id_1234, NULL);
- ast_test_status_update(test, "Playing back message from test_vm_api_2345 to callback function\n");
- VM_API_PLAYBACK_MESSAGE(test_channel, "test_vm_api_2345", "default", "INBOX", message_id_2345[0], &message_playback_callback_fn);
- VM_API_INT_VERIFY(global_entered_playback_callback, 1);
- global_entered_playback_callback = 0;
- ast_test_status_update(test, "Playing back message from test_vm_api_2345 to callback function with default context\n");
- VM_API_PLAYBACK_MESSAGE(test_channel, "test_vm_api_2345", NULL, "INBOX", message_id_2345[1], &message_playback_callback_fn);
- VM_API_INT_VERIFY(global_entered_playback_callback, 1);
- global_entered_playback_callback = 0;
- VM_API_SNAPSHOT_CREATE("test_vm_api_1234", "default", "Old", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 2);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- VM_API_SNAPSHOT_CREATE("test_vm_api_2345", "default", "Old", 0, AST_VM_SNAPSHOT_SORT_BY_TIME, 0);
- VM_API_INT_VERIFY(test_mbox_snapshot->total_msg_num, 2);
- test_mbox_snapshot = ast_vm_mailbox_snapshot_destroy(test_mbox_snapshot);
- ast_hangup(test_channel);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- AST_TEST_DEFINE(voicemail_api_off_nominal_msg_playback)
- {
- struct ast_channel *test_channel;
- const char *msg_id;
- const char *invalid_msg_id = "POOPOO";
- switch (cmd) {
- case TEST_INIT:
- info->name = "off_nominal_msg_playback";
- info->category = "/main/voicemail_api/";
- info->summary = "Off nominal message playback";
- info->description =
- "Tests off nominal conditions in playing back a "
- "message. This includes:\n"
- " * Invalid/NULL mailbox\n"
- " * Invalid context\n"
- " * Invalid/NULL folder\n"
- " * Invalid message identifiers\n";
- return AST_TEST_NOT_RUN;
- case TEST_EXECUTE:
- break;
- }
- VM_API_TEST_SETUP;
- msg_id = test_snapshots[0]->msg_id;
- if (!(test_channel = test_vm_api_create_mock_channel())) {
- ast_log(AST_LOG_ERROR, "Failed to create mock channel for testing\n");
- VM_API_TEST_CLEANUP;
- return AST_TEST_FAIL;
- }
- ast_test_status_update(test, "Playing back message from invalid mailbox\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_3456", "default", "INBOX", msg_id, NULL);
- ast_test_status_update(test, "Playing back message from NULL mailbox\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, NULL, "default", "INBOX", msg_id, NULL);
- ast_test_status_update(test, "Playing back message from invalid context\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_1234", "defunct", "INBOX", msg_id, NULL);
- ast_test_status_update(test, "Playing back message from invalid folder\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_1234", "default", "BACON", msg_id, NULL);
- ast_test_status_update(test, "Playing back message from NULL folder\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_1234", "default", NULL, msg_id, NULL);
- ast_test_status_update(test, "Playing back message with invalid message specifier\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_1234", "default", "INBOX", invalid_msg_id, NULL);
- ast_test_status_update(test, "Playing back message with NULL message specifier\n");
- VM_API_PLAYBACK_MESSAGE_OFF_NOMINAL(test_channel, "test_vm_api_1234", "default", "INBOX", NULL, NULL);
- ast_hangup(test_channel);
- VM_API_TEST_CLEANUP;
- return AST_TEST_PASS;
- }
- static int unload_module(void)
- {
-
- AST_TEST_UNREGISTER(voicemail_api_nominal_snapshot);
- AST_TEST_UNREGISTER(voicemail_api_off_nominal_snapshot);
-
- AST_TEST_UNREGISTER(voicemail_api_nominal_move);
- AST_TEST_UNREGISTER(voicemail_api_off_nominal_move);
-
- AST_TEST_UNREGISTER(voicemail_api_nominal_remove);
- AST_TEST_UNREGISTER(voicemail_api_off_nominal_remove);
-
- AST_TEST_UNREGISTER(voicemail_api_nominal_forward);
- AST_TEST_UNREGISTER(voicemail_api_off_nominal_forward);
-
- AST_TEST_UNREGISTER(voicemail_api_nominal_msg_playback);
- AST_TEST_UNREGISTER(voicemail_api_off_nominal_msg_playback);
- return 0;
- }
- static int load_module(void)
- {
-
- AST_TEST_REGISTER(voicemail_api_nominal_snapshot);
- AST_TEST_REGISTER(voicemail_api_off_nominal_snapshot);
-
- AST_TEST_REGISTER(voicemail_api_nominal_move);
- AST_TEST_REGISTER(voicemail_api_off_nominal_move);
-
- AST_TEST_REGISTER(voicemail_api_nominal_remove);
- AST_TEST_REGISTER(voicemail_api_off_nominal_remove);
-
- AST_TEST_REGISTER(voicemail_api_nominal_forward);
- AST_TEST_REGISTER(voicemail_api_off_nominal_forward);
-
- AST_TEST_REGISTER(voicemail_api_nominal_msg_playback);
- AST_TEST_REGISTER(voicemail_api_off_nominal_msg_playback);
- return AST_MODULE_LOAD_SUCCESS;
- }
- AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Core Voicemail API Tests");
|