2 * Asterisk -- An open source telephony toolkit.
4 * Copyright (C) 2013, Digium, Inc.
6 * Joshua Colp <jcolp@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 Bucket Unit Tests
23 * \author Joshua Colp <jcolp@digium.com>
28 <depend>TEST_FRAMEWORK</depend>
29 <support_level>core</support_level>
34 ASTERISK_FILE_VERSION(__FILE__, "")
38 #include "asterisk/test.h"
39 #include "asterisk/module.h"
40 #include "asterisk/bucket.h"
41 #include "asterisk/logger.h"
42 #include "asterisk/json.h"
43 #include "asterisk/file.h"
45 /*! \brief Test state structure for scheme wizards */
46 struct bucket_test_state {
47 /*! \brief Whether the object has been created or not */
48 unsigned int created:1;
49 /*! \brief Whether the object has been updated or not */
50 unsigned int updated:1;
51 /*! \brief Whether the object has been deleted or not */
52 unsigned int deleted:1;
55 /*! \brief Global scope structure for testing bucket wizards */
56 static struct bucket_test_state bucket_test_wizard_state;
58 static void bucket_test_wizard_clear(void)
60 bucket_test_wizard_state.created = 0;
61 bucket_test_wizard_state.updated = 0;
62 bucket_test_wizard_state.deleted = 0;
65 static int bucket_test_wizard_create(const struct ast_sorcery *sorcery, void *data, void *object)
67 if (bucket_test_wizard_state.created) {
71 bucket_test_wizard_state.created = 1;
76 static int bucket_test_wizard_update(const struct ast_sorcery *sorcery, void *data, void *object)
78 if (bucket_test_wizard_state.updated) {
82 bucket_test_wizard_state.updated = 1;
87 static void *bucket_test_wizard_retrieve_id(const struct ast_sorcery *sorcery, void *data, const char *type,
90 if (!strcmp(type, "bucket")) {
91 return ast_bucket_alloc(id);
92 } else if (!strcmp(type, "file")) {
93 return ast_bucket_file_alloc(id);
99 static int bucket_test_wizard_delete(const struct ast_sorcery *sorcery, void *data, void *object)
101 if (bucket_test_wizard_state.deleted) {
105 bucket_test_wizard_state.deleted = 1;
110 static struct ast_sorcery_wizard bucket_test_wizard = {
112 .create = bucket_test_wizard_create,
113 .retrieve_id = bucket_test_wizard_retrieve_id,
114 .delete = bucket_test_wizard_delete,
117 static struct ast_sorcery_wizard bucket_file_test_wizard = {
119 .create = bucket_test_wizard_create,
120 .update = bucket_test_wizard_update,
121 .retrieve_id = bucket_test_wizard_retrieve_id,
122 .delete = bucket_test_wizard_delete,
125 AST_TEST_DEFINE(bucket_scheme_register)
129 info->name = "bucket_scheme_register_unregister";
130 info->category = "/main/bucket/";
131 info->summary = "bucket scheme registration/unregistration unit test";
133 "Test registration and unregistration of bucket scheme";
134 return AST_TEST_NOT_RUN;
139 if (!ast_bucket_scheme_register("", NULL, NULL, NULL, NULL)) {
140 ast_test_status_update(test, "Successfully registered a Bucket scheme without name or wizards\n");
141 return AST_TEST_FAIL;
144 if (!ast_bucket_scheme_register("test", &bucket_test_wizard, &bucket_file_test_wizard, NULL, NULL)) {
145 ast_test_status_update(test, "Successfully registered a Bucket scheme twice\n");
146 return AST_TEST_FAIL;
149 return AST_TEST_PASS;
152 AST_TEST_DEFINE(bucket_alloc)
154 RAII_VAR(struct ast_bucket *, bucket, NULL, ao2_cleanup);
158 info->name = "bucket_alloc";
159 info->category = "/main/bucket/";
160 info->summary = "bucket allocation unit test";
162 "Test allocation of buckets";
163 return AST_TEST_NOT_RUN;
168 if ((bucket = ast_bucket_alloc(""))) {
169 ast_test_status_update(test, "Allocated a bucket with no URI provided\n");
170 return AST_TEST_FAIL;
173 if (!(bucket = ast_bucket_alloc("test:///tmp/bob"))) {
174 ast_test_status_update(test, "Failed to allocate bucket\n");
175 return AST_TEST_FAIL;
178 if (strcmp(ast_sorcery_object_get_id(bucket), "test:///tmp/bob")) {
179 ast_test_status_update(test, "URI within allocated bucket is '%s' and should be test:///tmp/bob\n",
180 ast_sorcery_object_get_id(bucket));
181 return AST_TEST_FAIL;
184 if (strcmp(bucket->scheme, "test")) {
185 ast_test_status_update(test, "Scheme within allocated bucket is '%s' and should be test\n",
187 return AST_TEST_FAIL;
190 return AST_TEST_PASS;
193 AST_TEST_DEFINE(bucket_create)
195 RAII_VAR(struct ast_bucket *, bucket, NULL, ao2_cleanup);
199 info->name = "bucket_create";
200 info->category = "/main/bucket/";
201 info->summary = "bucket creation unit test";
203 "Test creation of buckets";
204 return AST_TEST_NOT_RUN;
209 if (!(bucket = ast_bucket_alloc("test:///tmp/bob"))) {
210 ast_test_status_update(test, "Failed to allocate bucket\n");
211 return AST_TEST_FAIL;
214 bucket_test_wizard_clear();
216 if (ast_bucket_create(bucket)) {
217 ast_test_status_update(test, "Failed to create bucket with URI '%s'\n",
218 ast_sorcery_object_get_id(bucket));
219 return AST_TEST_FAIL;
222 if (!bucket_test_wizard_state.created) {
223 ast_test_status_update(test, "Bucket creation returned success but scheme implementation never actually created it\n");
224 return AST_TEST_FAIL;
227 if (!ast_bucket_create(bucket)) {
228 ast_test_status_update(test, "Successfully created bucket with URI '%s' twice\n",
229 ast_sorcery_object_get_id(bucket));
230 return AST_TEST_FAIL;
233 return AST_TEST_PASS;
236 AST_TEST_DEFINE(bucket_delete)
238 RAII_VAR(struct ast_bucket *, bucket, NULL, ao2_cleanup);
242 info->name = "bucket_delete";
243 info->category = "/main/bucket/";
244 info->summary = "bucket deletion unit test";
246 "Test deletion of buckets";
247 return AST_TEST_NOT_RUN;
252 if (!(bucket = ast_bucket_alloc("test:///tmp/bob"))) {
253 ast_test_status_update(test, "Failed to allocate bucket\n");
254 return AST_TEST_FAIL;
257 bucket_test_wizard_clear();
259 if (ast_bucket_delete(bucket)) {
260 ast_test_status_update(test, "Failed to delete bucket with URI '%s'\n",
261 ast_sorcery_object_get_id(bucket));
262 return AST_TEST_FAIL;
265 if (!bucket_test_wizard_state.deleted) {
266 ast_test_status_update(test, "Bucket deletion returned success but scheme implementation never actually deleted it\n");
267 return AST_TEST_FAIL;
270 if (!ast_bucket_delete(bucket)) {
271 ast_test_status_update(test, "Successfully deleted bucket with URI '%s' twice\n",
272 ast_sorcery_object_get_id(bucket));
273 return AST_TEST_FAIL;
276 return AST_TEST_PASS;
279 AST_TEST_DEFINE(bucket_json)
281 RAII_VAR(struct ast_bucket *, bucket, NULL, ao2_cleanup);
282 RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
283 RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
287 info->name = "bucket_json";
288 info->category = "/main/bucket/";
289 info->summary = "bucket json unit test";
291 "Test creation of JSON for a bucket";
292 return AST_TEST_NOT_RUN;
297 if (!(bucket = ast_bucket_alloc("test:///tmp/bob"))) {
298 ast_test_status_update(test, "Failed to allocate bucket\n");
299 return AST_TEST_FAIL;
302 ast_str_container_add(bucket->buckets, "test:///tmp/bob/joe");
303 ast_str_container_add(bucket->files, "test:///tmp/bob/recording.wav");
305 expected = ast_json_pack("{s: s, s: s, s: [s], s: s, s: [s], s: s}",
306 "modified", "0.000000", "created", "0.000000",
307 "buckets", "test:///tmp/bob/joe",
309 "files", "test:///tmp/bob/recording.wav",
310 "id", "test:///tmp/bob");
312 ast_test_status_update(test, "Could not produce JSON for expected bucket value\n");
313 return AST_TEST_FAIL;
316 json = ast_bucket_json(bucket);
318 ast_test_status_update(test, "Could not produce JSON for a valid bucket\n");
319 return AST_TEST_FAIL;
322 if (!ast_json_equal(json, expected)) {
323 ast_test_status_update(test, "Bucket JSON does not match expected output\n");
324 return AST_TEST_FAIL;
327 return AST_TEST_PASS;
330 AST_TEST_DEFINE(bucket_retrieve)
332 RAII_VAR(struct ast_bucket *, bucket, NULL, ao2_cleanup);
336 info->name = "bucket_retrieve";
337 info->category = "/main/bucket/";
338 info->summary = "bucket retrieval unit test";
340 "Test retrieval of buckets";
341 return AST_TEST_NOT_RUN;
346 if (!(bucket = ast_bucket_retrieve("test://tmp/bob"))) {
347 ast_test_status_update(test, "Failed to retrieve known valid bucket\n");
348 return AST_TEST_FAIL;
351 return AST_TEST_PASS;
354 AST_TEST_DEFINE(bucket_file_alloc)
356 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
360 info->name = "bucket_file_alloc";
361 info->category = "/main/bucket/";
362 info->summary = "bucket file allocation unit test";
364 "Test allocation of bucket files";
365 return AST_TEST_NOT_RUN;
370 if ((file = ast_bucket_file_alloc(""))) {
371 ast_test_status_update(test, "Allocated a file with no URI provided\n");
372 return AST_TEST_FAIL;
375 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
376 ast_test_status_update(test, "Failed to allocate file\n");
377 return AST_TEST_FAIL;
380 if (ast_strlen_zero(file->path)) {
381 ast_test_status_update(test, "Expected temporary path in allocated file");
382 return AST_TEST_FAIL;
385 if (strcmp(ast_sorcery_object_get_id(file), "test:///tmp/bob")) {
386 ast_test_status_update(test, "URI within allocated file is '%s' and should be test:///tmp/bob\n",
387 ast_sorcery_object_get_id(file));
388 return AST_TEST_FAIL;
391 if (strcmp(file->scheme, "test")) {
392 ast_test_status_update(test, "Scheme within allocated file is '%s' and should be test\n",
394 return AST_TEST_FAIL;
397 return AST_TEST_PASS;
400 AST_TEST_DEFINE(bucket_file_create)
402 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
406 info->name = "bucket_file_create";
407 info->category = "/main/bucket/";
408 info->summary = "file creation unit test";
410 "Test creation of files";
411 return AST_TEST_NOT_RUN;
416 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
417 ast_test_status_update(test, "Failed to allocate file\n");
418 return AST_TEST_FAIL;
421 bucket_test_wizard_clear();
423 if (ast_bucket_file_create(file)) {
424 ast_test_status_update(test, "Failed to create file with URI '%s'\n",
425 ast_sorcery_object_get_id(file));
426 return AST_TEST_FAIL;
429 if (!bucket_test_wizard_state.created) {
430 ast_test_status_update(test, "Bucket file creation returned success but scheme implementation never actually created it\n");
431 return AST_TEST_FAIL;
434 if (!ast_bucket_file_create(file)) {
435 ast_test_status_update(test, "Successfully created file with URI '%s' twice\n",
436 ast_sorcery_object_get_id(file));
437 return AST_TEST_FAIL;
440 return AST_TEST_PASS;
443 AST_TEST_DEFINE(bucket_file_copy)
445 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
446 RAII_VAR(struct ast_bucket_file *, copy, NULL, ao2_cleanup);
448 struct stat old, new;
449 RAII_VAR(struct ast_bucket_metadata *, metadata, NULL, ao2_cleanup);
453 info->name = "bucket_file_copy";
454 info->category = "/main/bucket/";
455 info->summary = "bucket file copying unit test";
457 "Test copying of bucket files";
458 return AST_TEST_NOT_RUN;
463 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
464 ast_test_status_update(test, "Failed to allocate file\n");
465 return AST_TEST_FAIL;
468 ast_bucket_file_metadata_set(file, "bob", "joe");
470 if (!(temporary = fopen(file->path, "w"))) {
471 ast_test_status_update(test, "Failed to open temporary file '%s'\n", file->path);
472 return AST_TEST_FAIL;
475 fprintf(temporary, "bob");
478 if (!(copy = ast_bucket_file_copy(file, "test:///tmp/bob2"))) {
479 ast_test_status_update(test, "Failed to copy file '%s' to test:///tmp/bob2\n",
480 ast_sorcery_object_get_id(file));
481 return AST_TEST_FAIL;
484 if (stat(file->path, &old)) {
485 ast_test_status_update(test, "Failed to retrieve information on old file '%s'\n", file->path);
486 return AST_TEST_FAIL;
489 if (stat(copy->path, &new)) {
490 ast_test_status_update(test, "Failed to retrieve information on copy file '%s'\n", copy->path);
491 return AST_TEST_FAIL;
494 if (old.st_size != new.st_size) {
495 ast_test_status_update(test, "Copying of underlying temporary file failed\n");
496 return AST_TEST_FAIL;
499 if (ao2_container_count(file->metadata) != ao2_container_count(copy->metadata)) {
500 ast_test_status_update(test, "Number of metadata entries does not match original\n");
501 return AST_TEST_FAIL;
504 metadata = ast_bucket_file_metadata_get(copy, "bob");
506 ast_test_status_update(test, "Copy of file does not have expected metadata\n");
507 return AST_TEST_FAIL;
510 if (strcmp(metadata->value, "joe")) {
511 ast_test_status_update(test, "Copy of file contains metadata for 'bob' but value is not what it should be\n");
512 return AST_TEST_FAIL;
515 return AST_TEST_PASS;
518 AST_TEST_DEFINE(bucket_file_retrieve)
520 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
524 info->name = "bucket_file_retrieve";
525 info->category = "/main/bucket/";
526 info->summary = "file retrieval unit test";
528 "Test retrieval of files";
529 return AST_TEST_NOT_RUN;
534 if (!(file = ast_bucket_file_retrieve("test://tmp/bob"))) {
535 ast_test_status_update(test, "Failed to retrieve known valid file\n");
536 return AST_TEST_FAIL;
539 return AST_TEST_PASS;
542 AST_TEST_DEFINE(bucket_file_update)
544 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
548 info->name = "bucket_file_update";
549 info->category = "/main/bucket/";
550 info->summary = "file updating unit test";
552 "Test updating of files";
553 return AST_TEST_NOT_RUN;
558 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
559 ast_test_status_update(test, "Failed to allocate file\n");
560 return AST_TEST_FAIL;
563 bucket_test_wizard_clear();
565 if (ast_bucket_file_update(file)) {
566 ast_test_status_update(test, "Failed to update file with URI '%s'\n",
567 ast_sorcery_object_get_id(file));
568 return AST_TEST_FAIL;
571 if (!bucket_test_wizard_state.updated) {
572 ast_test_status_update(test, "Successfully returned file was updated, but it was not\n");
573 return AST_TEST_FAIL;
576 if (!ast_bucket_file_update(file)) {
577 ast_test_status_update(test, "Successfully updated file with URI '%s' twice\n",
578 ast_sorcery_object_get_id(file));
579 return AST_TEST_FAIL;
582 return AST_TEST_PASS;
585 AST_TEST_DEFINE(bucket_file_delete)
587 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
591 info->name = "bucket_file_delete";
592 info->category = "/main/bucket/";
593 info->summary = "file deletion unit test";
595 "Test deletion of files";
596 return AST_TEST_NOT_RUN;
601 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
602 ast_test_status_update(test, "Failed to allocate file\n");
603 return AST_TEST_FAIL;
606 bucket_test_wizard_clear();
608 if (ast_bucket_file_delete(file)) {
609 ast_test_status_update(test, "Failed to delete file with URI '%s'\n",
610 ast_sorcery_object_get_id(file));
611 return AST_TEST_FAIL;
614 if (!bucket_test_wizard_state.deleted) {
615 ast_test_status_update(test, "Bucket file deletion returned success but scheme implementation never actually deleted it\n");
616 return AST_TEST_FAIL;
619 if (!ast_bucket_file_delete(file)) {
620 ast_test_status_update(test, "Successfully deleted file with URI '%s' twice\n",
621 ast_sorcery_object_get_id(file));
622 return AST_TEST_FAIL;
625 return AST_TEST_PASS;
628 AST_TEST_DEFINE(bucket_file_metadata_set)
630 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
631 RAII_VAR(struct ast_bucket_metadata *, metadata, NULL, ao2_cleanup);
635 info->name = "bucket_file_metadata_set";
636 info->category = "/main/bucket/";
637 info->summary = "file metadata setting unit test";
639 "Test setting of metadata on files";
640 return AST_TEST_NOT_RUN;
645 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
646 ast_test_status_update(test, "Failed to allocate file\n");
647 return AST_TEST_FAIL;
650 if (ao2_container_count(file->metadata) != 0) {
651 ast_test_status_update(test, "Newly allocated file has metadata count of '%d' when should be 0\n",
652 ao2_container_count(file->metadata));
653 return AST_TEST_FAIL;
656 if (ast_bucket_file_metadata_set(file, "bob", "joe")) {
657 ast_test_status_update(test, "Failed to set metadata 'bob' to 'joe' on newly allocated file\n");
658 return AST_TEST_FAIL;
661 if (!(metadata = ao2_find(file->metadata, "bob", OBJ_KEY))) {
662 ast_test_status_update(test, "Failed to find set metadata 'bob' on newly allocated file\n");
663 return AST_TEST_FAIL;
666 if (strcmp(metadata->value, "joe")) {
667 ast_test_status_update(test, "Metadata has value '%s' when should be 'joe'\n",
669 return AST_TEST_FAIL;
672 ao2_cleanup(metadata);
675 if (ast_bucket_file_metadata_set(file, "bob", "fred")) {
676 ast_test_status_update(test, "Failed to overwrite metadata 'bob' with new value 'fred'\n");
677 return AST_TEST_FAIL;
680 if (!(metadata = ao2_find(file->metadata, "bob", OBJ_KEY))) {
681 ast_test_status_update(test, "Failed to find overwritten metadata 'bob' on newly allocated file\n");
682 return AST_TEST_FAIL;
685 if (strcmp(metadata->value, "fred")) {
686 ast_test_status_update(test, "Metadata has value '%s' when should be 'fred'\n",
688 return AST_TEST_FAIL;
691 return AST_TEST_PASS;
694 AST_TEST_DEFINE(bucket_file_metadata_unset)
696 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
697 RAII_VAR(struct ast_bucket_metadata *, metadata, NULL, ao2_cleanup);
701 info->name = "bucket_file_metadata_unset";
702 info->category = "/main/bucket/";
703 info->summary = "file metadata unsetting unit test";
705 "Test unsetting of metadata on files";
706 return AST_TEST_NOT_RUN;
711 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
712 ast_test_status_update(test, "Failed to allocate file\n");
713 return AST_TEST_FAIL;
716 if (ast_bucket_file_metadata_set(file, "bob", "joe")) {
717 ast_test_status_update(test, "Failed to set metadata 'bob' to 'joe' on newly allocated file\n");
718 return AST_TEST_FAIL;
721 if (ast_bucket_file_metadata_unset(file, "bob")) {
722 ast_test_status_update(test, "Failed to unset metadata 'bob' on newly allocated file\n");
723 return AST_TEST_FAIL;
726 if ((metadata = ao2_find(file->metadata, "bob", OBJ_KEY))) {
727 ast_test_status_update(test, "Metadata 'bob' was unset, but can still be found\n");
728 return AST_TEST_FAIL;
731 return AST_TEST_PASS;
734 AST_TEST_DEFINE(bucket_file_metadata_get)
736 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
737 RAII_VAR(struct ast_bucket_metadata *, metadata, NULL, ao2_cleanup);
741 info->name = "bucket_file_metadata_get";
742 info->category = "/main/bucket/";
743 info->summary = "file metadata getting unit test";
745 "Test getting of metadata on files";
746 return AST_TEST_NOT_RUN;
751 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
752 ast_test_status_update(test, "Failed to allocate file\n");
753 return AST_TEST_FAIL;
756 if (ast_bucket_file_metadata_set(file, "bob", "joe")) {
757 ast_test_status_update(test, "Failed to set metadata 'bob' to 'joe' on newly allocated file\n");
758 return AST_TEST_FAIL;
761 if (!(metadata = ast_bucket_file_metadata_get(file, "bob"))) {
762 ast_test_status_update(test, "Failed to retrieve metadata 'bob' that was just set\n");
763 return AST_TEST_FAIL;
766 if (strcmp(metadata->value, "joe")) {
767 ast_test_status_update(test, "Retrieved metadata value is '%s' while it should be 'joe'\n",
769 return AST_TEST_FAIL;
772 return AST_TEST_PASS;
775 AST_TEST_DEFINE(bucket_file_json)
777 RAII_VAR(struct ast_bucket_file *, file, NULL, ao2_cleanup);
778 RAII_VAR(struct ast_json *, expected, NULL, ast_json_unref);
779 RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
783 info->name = "bucket_file_json";
784 info->category = "/main/bucket/";
785 info->summary = "file json unit test";
787 "Test creation of JSON for a file";
788 return AST_TEST_NOT_RUN;
793 if (!(file = ast_bucket_file_alloc("test:///tmp/bob"))) {
794 ast_test_status_update(test, "Failed to allocate bucket\n");
795 return AST_TEST_FAIL;
798 if (ast_bucket_file_metadata_set(file, "bob", "joe")) {
799 ast_test_status_update(test, "Failed to set metadata 'bob' to 'joe' on newly allocated file\n");
800 return AST_TEST_FAIL;
803 expected = ast_json_pack("{s: s, s: s, s: s, s: s, s: {s :s}}",
804 "modified", "0.000000", "created", "0.000000", "scheme", "test",
805 "id", "test:///tmp/bob", "metadata", "bob", "joe");
807 ast_test_status_update(test, "Could not produce JSON for expected bucket file value\n");
808 return AST_TEST_FAIL;
811 json = ast_bucket_file_json(file);
813 ast_test_status_update(test, "Could not produce JSON for a valid file\n");
814 return AST_TEST_FAIL;
817 if (!ast_json_equal(json, expected)) {
818 ast_test_status_update(test, "Bucket file JSON does not match expected output\n");
819 return AST_TEST_FAIL;
822 return AST_TEST_PASS;
825 static int unload_module(void)
827 AST_TEST_UNREGISTER(bucket_scheme_register);
828 AST_TEST_UNREGISTER(bucket_alloc);
829 AST_TEST_UNREGISTER(bucket_create);
830 AST_TEST_UNREGISTER(bucket_delete);
831 AST_TEST_UNREGISTER(bucket_retrieve);
832 AST_TEST_UNREGISTER(bucket_json);
833 AST_TEST_UNREGISTER(bucket_file_alloc);
834 AST_TEST_UNREGISTER(bucket_file_create);
835 AST_TEST_UNREGISTER(bucket_file_copy);
836 AST_TEST_UNREGISTER(bucket_file_retrieve);
837 AST_TEST_UNREGISTER(bucket_file_update);
838 AST_TEST_UNREGISTER(bucket_file_delete);
839 AST_TEST_UNREGISTER(bucket_file_metadata_set);
840 AST_TEST_UNREGISTER(bucket_file_metadata_unset);
841 AST_TEST_UNREGISTER(bucket_file_metadata_get);
842 AST_TEST_UNREGISTER(bucket_file_json);
846 static int load_module(void)
848 if (ast_bucket_scheme_register("test", &bucket_test_wizard, &bucket_file_test_wizard,
849 ast_bucket_file_temporary_create, ast_bucket_file_temporary_destroy)) {
850 ast_log(LOG_ERROR, "Failed to register Bucket test wizard scheme implementation\n");
851 return AST_MODULE_LOAD_FAILURE;
854 AST_TEST_REGISTER(bucket_scheme_register);
855 AST_TEST_REGISTER(bucket_alloc);
856 AST_TEST_REGISTER(bucket_create);
857 AST_TEST_REGISTER(bucket_delete);
858 AST_TEST_REGISTER(bucket_retrieve);
859 AST_TEST_REGISTER(bucket_json);
860 AST_TEST_REGISTER(bucket_file_alloc);
861 AST_TEST_REGISTER(bucket_file_create);
862 AST_TEST_REGISTER(bucket_file_copy);
863 AST_TEST_REGISTER(bucket_file_retrieve);
864 AST_TEST_REGISTER(bucket_file_update);
865 AST_TEST_REGISTER(bucket_file_delete);
866 AST_TEST_REGISTER(bucket_file_metadata_set);
867 AST_TEST_REGISTER(bucket_file_metadata_unset);
868 AST_TEST_REGISTER(bucket_file_metadata_get);
869 AST_TEST_REGISTER(bucket_file_json);
870 return AST_MODULE_LOAD_SUCCESS;
873 AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Bucket test module");