39 #define TEST_CATEGORY "/main/core_format/"
72 .
name =
"test_core_format_codec",
73 .description =
"Unit test codec used by test_core_format",
74 .type = AST_MEDIA_TYPE_AUDIO,
149 if (!memcmp(pvt1, pvt2,
sizeof(*pvt1))) {
195 if (!strcmp(name,
"one")) {
197 }
else if (!strcmp(name,
"two")) {
210 if (!strcmp(name,
"one")) {
212 }
else if (!strcmp(name,
"two")) {
260 info->name = __PRETTY_FUNCTION__;
261 info->category = TEST_CATEGORY;
262 info->summary =
"Format creation unit test";
264 "Test creation of a format";
265 return AST_TEST_NOT_RUN;
272 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
273 return AST_TEST_FAIL;
278 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
279 return AST_TEST_FAIL;
281 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
282 return AST_TEST_FAIL;
288 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
289 return AST_TEST_FAIL;
291 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
292 return AST_TEST_FAIL;
295 return AST_TEST_PASS;
306 info->name = __PRETTY_FUNCTION__;
307 info->category = TEST_CATEGORY;
308 info->summary =
"Format creation w/ attributes unit test";
310 "Test creation of a format with attributes";
311 return AST_TEST_NOT_RUN;
316 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
318 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
319 return AST_TEST_FAIL;
324 ast_test_status_update(
test,
"Could not create format using test_core_format_codec codec\n");
325 return AST_TEST_FAIL;
327 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
328 return AST_TEST_FAIL;
332 if (!format_w_attr) {
333 ast_test_status_update(
test,
"Could not create format with attributes using test_core_format_codec codec\n");
334 return AST_TEST_FAIL;
336 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
337 return AST_TEST_FAIL;
339 ast_test_status_update(
test,
"Format with attributes should not be equal to format without attributes\n");
340 return AST_TEST_FAIL;
346 return AST_TEST_PASS;
357 info->name = __PRETTY_FUNCTION__;
358 info->category = TEST_CATEGORY;
359 info->summary =
"Format attribute retrieval unit test";
361 "Test retrieval of format attributes";
362 return AST_TEST_NOT_RUN;
367 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
369 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
370 return AST_TEST_FAIL;
375 ast_test_status_update(
test,
"Could not create format using test_core_format_codec codec\n");
376 return AST_TEST_FAIL;
380 if (!format_w_attr) {
381 ast_test_status_update(
test,
"Could not create format with attributes using test_core_format_codec codec\n");
382 return AST_TEST_FAIL;
386 ast_test_status_update(
test,
"Could not retrieve valid format attribute\n");
387 return AST_TEST_FAIL;
391 ast_test_status_update(
test,
"Retrieved invalid format attribute\n");
392 return AST_TEST_FAIL;
395 return AST_TEST_PASS;
407 info->name = __PRETTY_FUNCTION__;
408 info->category = TEST_CATEGORY;
409 info->summary =
"Format cloning unit test";
411 "Test cloning of a format";
412 return AST_TEST_NOT_RUN;
417 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
419 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
420 return AST_TEST_FAIL;
425 ast_test_status_update(
test,
"Could not create format using test_core_format_codec codec\n");
426 return AST_TEST_FAIL;
428 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
429 return AST_TEST_FAIL;
433 if (!format_w_attr) {
434 ast_test_status_update(
test,
"Could not create format with attributes using test_core_format_codec codec\n");
435 return AST_TEST_FAIL;
437 ast_test_status_update(
test,
"Created format does not contain provided codec\n");
438 return AST_TEST_FAIL;
444 ast_test_status_update(
test,
"Could not create cloned format\n");
445 return AST_TEST_FAIL;
447 ast_test_status_update(
test,
"Cloned format does not contain provided codec\n");
448 return AST_TEST_FAIL;
449 }
else if (clone == format) {
450 ast_test_status_update(
test,
"Cloned format pointer is the same as original format pointer\n");
451 return AST_TEST_FAIL;
453 ast_test_status_update(
test,
"Cloned format is not the same as its original format\n");
454 return AST_TEST_FAIL;
461 ast_test_status_update(
test,
"Could not create cloned format\n");
462 return AST_TEST_FAIL;
464 ast_test_status_update(
test,
"Cloned format does not contain provided codec\n");
465 return AST_TEST_FAIL;
466 }
else if (clone == format_w_attr) {
467 ast_test_status_update(
test,
"Cloned format pointer is the same as original format pointer\n");
468 return AST_TEST_FAIL;
470 ast_test_status_update(
test,
"Cloned format is not the same as its original format\n");
471 return AST_TEST_FAIL;
477 return AST_TEST_PASS;
489 info->name = __PRETTY_FUNCTION__;
490 info->category = TEST_CATEGORY;
491 info->summary =
"Format comparison unit test";
493 "Test comparison of two different formats with same codec";
494 return AST_TEST_NOT_RUN;
501 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
502 return AST_TEST_FAIL;
507 ast_test_status_update(
test,
"Could not create first format using built-in codec\n");
508 return AST_TEST_FAIL;
513 ast_test_status_update(
test,
"Could not create second format using built-in codec\n");
514 return AST_TEST_FAIL;
519 ast_test_status_update(
test,
"Could not create named format using built-in codec\n");
520 return AST_TEST_FAIL;
524 ast_test_status_update(
test,
"Two formats that are the same compared as not being equal\n");
525 return AST_TEST_FAIL;
529 ast_test_status_update(
test,
"Two formats that are the same compared as not being equal\n");
530 return AST_TEST_FAIL;
533 return AST_TEST_PASS;
545 info->name = __PRETTY_FUNCTION__;
546 info->category = TEST_CATEGORY;
547 info->summary =
"Format comparison unit test";
549 "Test comparison of two different formats with different codec";
550 return AST_TEST_NOT_RUN;
555 first_codec =
ast_codec_get(
"ulaw", AST_MEDIA_TYPE_AUDIO, 8000);
557 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
558 return AST_TEST_FAIL;
563 ast_test_status_update(
test,
"Could not create first format using built-in codec\n");
564 return AST_TEST_FAIL;
567 second_codec =
ast_codec_get(
"alaw", AST_MEDIA_TYPE_AUDIO, 8000);
569 ast_test_status_update(
test,
"Could not retrieve built-in alaw codec\n");
570 return AST_TEST_FAIL;
575 ast_test_status_update(
test,
"Could not create second format using built-in codec\n");
576 return AST_TEST_FAIL;
580 ast_test_status_update(
test,
"Two formats that have different codecs did not compare as being not equal\n");
581 return AST_TEST_FAIL;
584 return AST_TEST_PASS;
596 info->name = __PRETTY_FUNCTION__;
597 info->category = TEST_CATEGORY;
598 info->summary =
"Format with attributes comparison unit test";
600 "Test comparison of two different formats with attributes with same codec";
601 return AST_TEST_NOT_RUN;
606 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
608 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
609 return AST_TEST_FAIL;
614 ast_test_status_update(
test,
"Could not create format using test_core_format_codec codec\n");
615 return AST_TEST_FAIL;
620 ast_test_status_update(
test,
"Could not create first format with attributes\n");
621 return AST_TEST_FAIL;
626 ast_test_status_update(
test,
"Could not create second format with attributes\n");
627 return AST_TEST_FAIL;
631 ast_test_status_update(
test,
"Formats with different attributes were compared to be equal when they should not\n");
632 return AST_TEST_FAIL;
639 ast_test_status_update(
test,
"Formats with the same attributes should be equal\n");
640 return AST_TEST_FAIL;
646 return AST_TEST_PASS;
658 info->name = __PRETTY_FUNCTION__;
659 info->category = TEST_CATEGORY;
660 info->summary =
"Joint format unit test";
662 "Test joint format creation using two different formats with same codec";
663 return AST_TEST_NOT_RUN;
670 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
671 return AST_TEST_FAIL;
676 ast_test_status_update(
test,
"Could not create first format using built-in codec\n");
677 return AST_TEST_FAIL;
682 ast_test_status_update(
test,
"Could not create second format using built-in codec\n");
683 return AST_TEST_FAIL;
688 ast_test_status_update(
test,
"Failed to create a joint format using two formats of same codec\n");
689 return AST_TEST_FAIL;
691 ast_test_status_update(
test,
"Returned joint format does not contain expected codec\n");
692 return AST_TEST_FAIL;
695 return AST_TEST_PASS;
705 struct ast_str *fmtp = ast_str_alloca(64);
709 info->name = __PRETTY_FUNCTION__;
710 info->category = TEST_CATEGORY;
711 info->summary =
"Joint format attribute unit test";
713 "Test joint format creation using two different formats with attributes and with same codec";
714 return AST_TEST_NOT_RUN;
719 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
721 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
722 return AST_TEST_FAIL;
727 ast_test_status_update(
test,
"Could not create format from test_core_format_codec codec\n");
728 return AST_TEST_FAIL;
733 ast_test_status_update(
test,
"Could not create first format using test_core_format_codec codec\n");
734 return AST_TEST_FAIL;
739 ast_test_status_update(
test,
"Could not create second format using test_core_format_codec codec\n");
740 return AST_TEST_FAIL;
745 ast_test_status_update(
test,
"Failed to create a joint format using two formats of same codec\n");
746 return AST_TEST_FAIL;
748 ast_test_status_update(
test,
"Returned joint format does not contain expected codec\n");
749 return AST_TEST_FAIL;
753 ast_test_validate(
test, strcmp(
"a=fmtp:100 one=5;two=0\r\n",
ast_str_buffer(fmtp)) == 0);
759 return AST_TEST_PASS;
772 info->name = __PRETTY_FUNCTION__;
773 info->category = TEST_CATEGORY;
774 info->summary =
"Joint format unit test";
776 "Test that there is no joint format between two different formats with different codec";
777 return AST_TEST_NOT_RUN;
782 first_codec =
ast_codec_get(
"ulaw", AST_MEDIA_TYPE_AUDIO, 8000);
784 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
785 return AST_TEST_FAIL;
790 ast_test_status_update(
test,
"Could not create first format using built-in codec\n");
791 return AST_TEST_FAIL;
794 second_codec =
ast_codec_get(
"alaw", AST_MEDIA_TYPE_AUDIO, 8000);
796 ast_test_status_update(
test,
"Could not retrieve built-in alaw codec\n");
797 return AST_TEST_FAIL;
802 ast_test_status_update(
test,
"Could not create second format using built-in codec\n");
803 return AST_TEST_FAIL;
808 ast_test_status_update(
test,
"Got a joint format between two formats with different codecs\n");
809 return AST_TEST_FAIL;
812 return AST_TEST_PASS;
823 info->name = __PRETTY_FUNCTION__;
824 info->category = TEST_CATEGORY;
825 info->summary =
"Format copying unit test";
827 "Test copying of a format";
828 return AST_TEST_NOT_RUN;
835 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
836 return AST_TEST_FAIL;
841 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
842 return AST_TEST_FAIL;
847 ast_test_status_update(
test,
"Copying of a just created format failed\n");
848 return AST_TEST_FAIL;
849 }
else if (
copy != format) {
850 ast_test_status_update(
test,
"Copying of a format returned a new format instead of the same one\n");
851 return AST_TEST_FAIL;
854 return AST_TEST_PASS;
865 info->name = __PRETTY_FUNCTION__;
866 info->category = TEST_CATEGORY;
867 info->summary =
"Format attribute setting unit test";
869 "Test that attribute setting on a format without an interface fails";
870 return AST_TEST_NOT_RUN;
877 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
878 return AST_TEST_FAIL;
883 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
884 return AST_TEST_FAIL;
889 ast_test_status_update(
test,
"Successfully set an attribute on a format without an interface\n");
890 return AST_TEST_FAIL;
892 ao2_cleanup(attr_set);
894 return AST_TEST_PASS;
904 info->name = __PRETTY_FUNCTION__;
905 info->category = TEST_CATEGORY;
906 info->summary =
"Format attribute retrieval unit test";
908 "Test that attribute retrieval on a format without an interface fails";
909 return AST_TEST_NOT_RUN;
916 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
917 return AST_TEST_FAIL;
922 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
923 return AST_TEST_FAIL;
927 ast_test_status_update(
test,
"Successfully retrieved an attribute on a format without an interface\n");
928 return AST_TEST_FAIL;
931 return AST_TEST_PASS;
942 info->name = __PRETTY_FUNCTION__;
943 info->category = TEST_CATEGORY;
944 info->summary =
"Format sdp parse unit test";
946 "Test that sdp parsing on a format without an interface fails";
947 return AST_TEST_NOT_RUN;
954 ast_test_status_update(
test,
"Could not retrieve built-in ulaw codec\n");
955 return AST_TEST_FAIL;
960 ast_test_status_update(
test,
"Could not create format using built-in codec\n");
961 return AST_TEST_FAIL;
965 if (generated != format) {
966 ast_test_status_update(
test,
"Successfully parsed SDP on a format without an interface\n");
967 return AST_TEST_FAIL;
970 return AST_TEST_PASS;
978 struct ast_str *fmtp = ast_str_alloca(64);
982 info->name = __PRETTY_FUNCTION__;
983 info->category = TEST_CATEGORY;
984 info->summary =
"Format sdp parse/generate unit test";
986 "Test that sdp parsing and generation on a format with an interface succeeds";
987 return AST_TEST_NOT_RUN;
992 codec =
ast_codec_get(
"test_core_format_codec", AST_MEDIA_TYPE_AUDIO, 8000);
994 ast_test_status_update(
test,
"Could not retrieve test_core_format_codec codec\n");
995 return AST_TEST_FAIL;
1000 ast_test_status_update(
test,
"Could not create format using test_core_format_codec codec\n");
1001 return AST_TEST_FAIL;
1005 if (format == generated) {
1006 ast_test_status_update(
test,
"Failed to parse SDP on a format without an interface\n");
1007 return AST_TEST_FAIL;
1012 ast_test_validate(
test, strcmp(
"a=fmtp:8 one=1000;two=256\r\n",
ast_str_buffer(fmtp)) == 0);
1016 return AST_TEST_PASS;
1019 static int test_core_format_init(
struct ast_test_info *info,
struct ast_test *
test)
1026 static int unload_module(
void)
1028 AST_TEST_UNREGISTER(format_create);
1029 AST_TEST_UNREGISTER(format_create_attr);
1030 AST_TEST_UNREGISTER(format_retrieve_attr);
1031 AST_TEST_UNREGISTER(format_clone);
1032 AST_TEST_UNREGISTER(format_cmp_same_codec);
1033 AST_TEST_UNREGISTER(format_attr_cmp_same_codec);
1034 AST_TEST_UNREGISTER(format_cmp_different_codec);
1035 AST_TEST_UNREGISTER(format_joint_same_codec);
1036 AST_TEST_UNREGISTER(format_attr_joint_same_codec);
1037 AST_TEST_UNREGISTER(format_joint_different_codec);
1038 AST_TEST_UNREGISTER(format_copy);
1039 AST_TEST_UNREGISTER(format_attribute_set_without_interface);
1040 AST_TEST_UNREGISTER(format_attribute_get_without_interface);
1041 AST_TEST_UNREGISTER(format_parse_sdp_fmtp_without_interface);
1042 AST_TEST_UNREGISTER(format_parse_and_generate_sdp_fmtp);
1047 static int load_module(
void)
1051 ast_log(AST_LOG_ERROR,
"Failed to register test_core_format_codec\n");
1056 ast_log(AST_LOG_ERROR,
"Failed to register format interface for test_core_format_codec\n");
1060 AST_TEST_REGISTER(format_create);
1061 AST_TEST_REGISTER(format_create_attr);
1062 AST_TEST_REGISTER(format_retrieve_attr);
1063 AST_TEST_REGISTER(format_clone);
1064 AST_TEST_REGISTER(format_cmp_same_codec);
1065 AST_TEST_REGISTER(format_attr_cmp_same_codec);
1066 AST_TEST_REGISTER(format_cmp_different_codec);
1067 AST_TEST_REGISTER(format_joint_same_codec);
1068 AST_TEST_REGISTER(format_attr_joint_same_codec);
1069 AST_TEST_REGISTER(format_joint_different_codec);
1070 AST_TEST_REGISTER(format_copy);
1071 AST_TEST_REGISTER(format_attribute_set_without_interface);
1072 AST_TEST_REGISTER(format_attribute_get_without_interface);
1073 AST_TEST_REGISTER(format_parse_sdp_fmtp_without_interface);
1074 AST_TEST_REGISTER(format_parse_and_generate_sdp_fmtp);
1076 ast_test_register_init(TEST_CATEGORY, &test_core_format_init);
Contains all the initialization information required to store a new test definition.
const char * name
Name for this codec.
Asterisk main include file. File version handling, generic pbx functions.
char * ast_str_buffer(const struct ast_str *buf)
Returns the string buffer within the ast_str buf.
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
static int copy(char *infile, char *outfile)
Utility function to copy a file.
struct ast_codec * ast_codec_get(const char *name, enum ast_media_type type, unsigned int sample_rate)
Retrieve a codec given a name, type, and sample rate.
#define ao2_bump(obj)
Bump refcount on an AO2 object by one, returning the object.
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
int format_generate_sdp_fmtp
#define ast_codec_register(codec)
This function is used to register a codec with the Asterisk core. Registering allows it to be passed ...
Support for dynamic strings.
int format_parse_sdp_fmtp
#define ast_calloc(num, len)
A wrapper for calloc()
Module has failed to load, may be in an inconsistent state.
Tracking object used to verify format attribute callbacks.
#define AST_TEST_DEFINE(hdr)
#define ASTERISK_GPL_KEY
The text the key() function should return.
Asterisk module definitions.
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Represents a media codec within Asterisk.