From 073c498277f1d5ea5d11d29b71d16c59b38371d8 Mon Sep 17 00:00:00 2001 From: stefano Date: Fri, 6 Feb 2009 23:29:25 +0000 Subject: [PATCH] Add a new test program for base64, based on that removed in r17024. git-svn-id: file:///var/local/repositories/ffmpeg/trunk@17025 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b --- libavutil/Makefile | 2 +- libavutil/base64.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/libavutil/Makefile b/libavutil/Makefile index 7f5b62ad6..6c4543ae9 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 91a5d2300..2c980cfef 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 -- 2.39.2