freeswitch/libs/sofia-sip/libsofia-sip-ua/ipt/torture_base64.c

191 lines
4.6 KiB
C

/*
* This file is part of the Sofia-SIP package
*
* Copyright (C) 2005 Nokia Corporation.
*
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
*/
/**
* @file torture_base64.c
* @brief Test BASE64 encoding/decoding
*
* @author Pekka Pessi <Pekka.Pessi@nokia.com> \n
*
* @date Created: Tue Feb 1 13:29:09 EET 2005 ppessi
*
*/
#include "config.h"
#include <stddef.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "sofia-sip/base64.h"
int tstflags = 0;
#define TSTFLAGS tstflags
char const *name = "torture_base64";
#include <sofia-sip/tstdef.h>
char const constant[] = "not changed";
int test_encoding(void)
{
char buffer[32];
BEGIN();
TEST_SIZE(base64_e(buffer, sizeof buffer, "\0\020\203", 3), 4);
TEST_S(buffer, "ABCD");
strcpy(buffer + 5, "not changed");
TEST_SIZE(base64_e(buffer, 5, "\0\020\203", 3), 4);
TEST_S(buffer + 5, "not changed");
TEST_S(buffer, "ABCD");
strcpy(buffer + 4, "not changed");
TEST_SIZE(base64_e(buffer, 4, "\0\020\203", 3), 4);
TEST_S(buffer + 4, "not changed");
TEST_S(buffer, "ABC");
strcpy(buffer + 3, "not changed");
TEST_SIZE(base64_e(buffer, 3, "\0\020\203", 3), 4);
TEST_S(buffer + 3, "not changed");
TEST_S(buffer, "AB");
strcpy(buffer + 2, "not changed");
TEST_SIZE(base64_e(buffer, 2, "\0\020\203", 3), 4);
TEST_S(buffer + 2, "not changed");
TEST_S(buffer, "A");
strcpy(buffer + 1, "not changed");
TEST_SIZE(base64_e(buffer, 1, "\0\020\203", 3), 4);
TEST_S(buffer + 1, "not changed");
TEST_S(buffer, "");
strcpy(buffer + 5, "not changed");
TEST_SIZE(base64_e(buffer, 5, "\0\020", 2), 4);
TEST_S(buffer + 5, "not changed");
TEST_S(buffer, "ABA=");
strcpy(buffer + 4, "not changed");
TEST_SIZE(base64_e(buffer, 4, "\0\020", 2), 4);
TEST_S(buffer + 4, "not changed");
TEST_S(buffer, "ABA");
strcpy(buffer + 3, "not changed");
TEST_SIZE(base64_e(buffer, 3, "\0\020", 2), 4);
TEST_S(buffer + 3, "not changed");
TEST_S(buffer, "AB");
strcpy(buffer + 2, "not changed");
TEST_SIZE(base64_e(buffer, 2, "\0\020", 2), 4);
TEST_S(buffer + 2, "not changed");
TEST_S(buffer, "A");
strcpy(buffer + 1, "not changed");
TEST_SIZE(base64_e(buffer, 1, "\0\020", 2), 4);
TEST_S(buffer + 1, "not changed");
TEST_S(buffer, "");
strcpy(buffer + 5, "not changed");
TEST_SIZE(base64_e(buffer, 5, "\0", 1), 4);
TEST_S(buffer + 5, "not changed");
TEST_S(buffer, "AA==");
strcpy(buffer + 4, "not changed");
TEST_SIZE(base64_e(buffer, 4, "\0", 1), 4);
TEST_S(buffer + 4, "not changed");
TEST_S(buffer, "AA=");
strcpy(buffer + 3, "not changed");
TEST_SIZE(base64_e(buffer, 3, "\0", 1), 4);
TEST_S(buffer + 3, "not changed");
TEST_S(buffer, "AA");
strcpy(buffer + 2, "not changed");
TEST_SIZE(base64_e(buffer, 2, "\0", 1), 4);
TEST_S(buffer + 2, "not changed");
TEST_S(buffer, "A");
strcpy(buffer + 1, "not changed");
TEST_SIZE(base64_e(buffer, 1, "\0", 1), 4);
TEST_S(buffer + 1, "not changed");
TEST_S(buffer, "");
END();
}
int test_decoding(void)
{
char buffer[32];
BEGIN();
strcpy(buffer + 0, "not changed");
TEST_SIZE(base64_d((void *)buffer, 0, "ABCD"), 3);
TEST_S(buffer + 0, "not changed");
TEST_SIZE(base64_d((void *)buffer, 3, "ABCD"), 3);
TEST_M(buffer, "\0\020\203", 3);
TEST_SIZE(base64_d(NULL, 3, "ABCD"), 3);
TEST_SIZE(base64_d((void *)buffer, 3, "A B C D !!"), 3);
TEST_M(buffer, "\0\020\203", 3);
END();
}
void usage(int exitcode)
{
fprintf(stderr,
"usage: %s [-v] [-a]\n",
name);
exit(exitcode);
}
int main(int argc, char *argv[])
{
int retval = 0;
int i;
for (i = 1; argv[i]; i++) {
if (strcmp(argv[i], "-v") == 0)
tstflags |= tst_verbatim;
else if (strcmp(argv[i], "-a") == 0)
tstflags |= tst_abort;
else
usage(1);
}
retval |= test_encoding(); fflush(stdout);
retval |= test_decoding(); fflush(stdout);
return retval;
}