From 21eff9ced790c4b8c697837213e7fc7aa44be62b Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Fri, 6 Feb 2009 23:29:25 +0000 Subject: Add a new test program for base64, based on that removed in r17024. See the thread: "[PATCH] remove unused and broken test program in libavutil/base64.c". Originally committed as revision 17025 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavutil/Makefile | 2 +- libavutil/base64.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) (limited to 'libavutil') diff --git a/libavutil/Makefile b/libavutil/Makefile index 7f5b62ad6f..6c4543ae97 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -41,7 +41,7 @@ OBJS = adler32.o \ tree.o \ utils.o \ -TESTS = $(addsuffix -test$(EXESUF), adler32 aes crc des lls md5 pca random sha1 softfloat tree) +TESTS = $(addsuffix -test$(EXESUF), adler32 aes base64 crc des lls md5 pca random sha1 softfloat tree) DIRS = arm bfin sh4 x86 diff --git a/libavutil/base64.c b/libavutil/base64.c index 91a5d23005..2c980cfefd 100644 --- a/libavutil/base64.c +++ b/libavutil/base64.c @@ -98,3 +98,66 @@ char *av_base64_encode(char * buf, int buf_len, const uint8_t * src, int len) return ret; } + +#ifdef TEST + +#undef printf + +#define MAX_DATA_SIZE 1024 +#define MAX_ENCODED_SIZE 2048 + +int test_encode_decode(const uint8_t *data, unsigned int data_size, const char *encoded_ref) +{ + char encoded[MAX_ENCODED_SIZE]; + uint8_t data2[MAX_DATA_SIZE]; + int data2_size, max_data2_size = MAX_DATA_SIZE; + + if (!av_base64_encode(encoded, MAX_ENCODED_SIZE, data, data_size)) { + printf("Failed: cannot encode the input data\n"); + return 1; + } + if (encoded_ref && strcmp(encoded, encoded_ref)) { + printf("Failed: encoded string differs from reference\n" + "Encoded:\n%s\nReference:\n%s\n", encoded, encoded_ref); + return 1; + } + + if ((data2_size = av_base64_decode(data2, encoded, max_data2_size)) < 0) { + printf("Failed: cannot decode the encoded string\n" + "Encoded:\n%s\n", encoded); + return 1; + } + if (memcmp(data2, data, data_size)) { + printf("Failed: encoded/decoded data differs from original data\n"); + return 1; + } + + printf("Passed!\n"); + return 0; +} + +int main(void) +{ + int i, error_count = 0; + struct test { + const uint8_t *data; + const char *encoded_ref; + } tests[] = { + { "", ""}, + { "1", "MQ=="}, + { "22", "MjI="}, + { "333", "MzMz"}, + { "4444", "NDQ0NA=="}, + { "55555", "NTU1NTU="}, + { "666666", "NjY2NjY2"}, + { "abc:def", "YWJjOmRlZg=="}, + }; + + printf("Encoding/decoding tests\n"); + for (i = 0; i < FF_ARRAY_ELEMS(tests); i++) + error_count += test_encode_decode(tests[i].data, strlen(tests[i].data), tests[i].encoded_ref); + + return error_count; +} + +#endif -- cgit v1.2.3