From: Simon Josefsson Date: Mon, 2 Aug 2004 21:28:30 +0000 (+0000) Subject: Add (start of) self test suite. X-Git-Tag: gnutls_1_1_13~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cf0ae128a8a6df699715080bef4dc6251a744eca;p=thirdparty%2Fgnutls.git Add (start of) self test suite. --- diff --git a/Makefile.am b/Makefile.am index 4302a318bd..646c2344e4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in EXTRA_DIST = ChangeLog NEWS INSTALL README THANKS COPYING COPYING.LIB -SUBDIRS = includes lib libextra src doc +SUBDIRS = includes lib libextra src doc tests ChangeLog: cvs2cl --utc -U .cvsusers --fsf -t -S --prune diff --git a/NEWS b/NEWS index 106ed9d34a..3835b1e537 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,6 @@ +Version 1.1.13 +- Added simple self test suite. + Version 1.1.12 (02/08/2004) - Updated the SRP authentication to conform to the latest (yet unreleased) draft. Unfortunately this breaks diff --git a/configure.in b/configure.in index 8c5b48269f..faae1a704e 100644 --- a/configure.in +++ b/configure.in @@ -566,6 +566,7 @@ doc/Makefile src/x509/Makefile src/srp/Makefile src/openpgp/Makefile \ src/cfg/Makefile src/cfg/platon/Makefile src/cfg/platon/str/Makefile \ doc/tex/Makefile doc/tex/cover.tex doc/scripts/Makefile \ doc/examples/Makefile lib/minitasn1/Makefile lib/x509/Makefile \ -includes/Makefile includes/gnutls/Makefile doc/manpages/Makefile]) +includes/Makefile includes/gnutls/Makefile doc/manpages/Makefile \ +tests/Makefile]) AC_OUTPUT diff --git a/tests/Makefile b/tests/Makefile deleted file mode 100644 index 7549a80369..0000000000 --- a/tests/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -LIBS=`../lib/libgnutls-config --libs` -lgcrypt -LIBS2=`../lib/libgnutls-config --libs` `../libextra/libgnutls-extra-config --libs` -lgcrypt -lopencdk -CC=gcc -CFLAGS=-O2 -I../libextra/ -I../ -I../lib/ `../lib/libgnutls-config --cflags` -I../lib/minitasn1/ - -all: x509test opgptest - -x509test: x509_test.c - $(CC) $(CFLAGS) x509_test.c $(LIBS) -o x509test - -opgptest: openpgp_test.c - $(CC) $(CFLAGS) openpgp_test.c $(LIBS2) -o opgptest - - -check: x509test - ./x509test - ./opgptest - -clean: - rm *~ - rm *.o - rm x509test - rm opgptest diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000000..2ca2437347 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,51 @@ +## Process this file with automake to produce Makefile.in +# Copyright (C) 2004 Free Software Foundation +# +# This file is part of GNUTLS. +# +# GNUTLS is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GNUTLS 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +AM_CPPFLAGS = -I../include +AM_LDFLAGS = -no-install +LDADD = ../lib/libgnutls.la libutils.la + +noinst_LTLIBRARIES = libutils.la +libutils_la_SOURCES = utils.h utils.c + +TESTS = simple +check_PROGRAMS = $(TESTS) + +# LIBS=`../lib/libgnutls-config --libs` -lgcrypt +# LIBS2=`../lib/libgnutls-config --libs` `../libextra/libgnutls-extra-config --libs` -lgcrypt -lopencdk +# CC=gcc +# CFLAGS=-O2 -I../libextra/ -I../ -I../lib/ `../lib/libgnutls-config --cflags` -I../lib/minitasn1/ +# +# all: x509test opgptest +# +# x509test: x509_test.c +# $(CC) $(CFLAGS) x509_test.c $(LIBS) -o x509test +# +# opgptest: openpgp_test.c +# $(CC) $(CFLAGS) openpgp_test.c $(LIBS2) -o opgptest +# +# check: x509test +# ./x509test +# ./opgptest +# +# clean: +# rm *~ +# rm *.o +# rm x509test +# rm opgptest diff --git a/tests/simple.c b/tests/simple.c new file mode 100644 index 0000000000..2bf5360a80 --- /dev/null +++ b/tests/simple.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2004 Free Software Foundation + * + * This file is part of GNUTLS. + * + * GNUTLS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUTLS 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "utils.h" + +void +doit (void) +{ + if (debug) + { + printf ("GNUTLS header version %s.\n", LIBGNUTLS_VERSION); + printf ("GNUTLS library version %s.\n", gnutls_check_version (NULL)); + } + + if (gnutls_check_version (LIBGNUTLS_VERSION)) + success ("gnutls_check_version OK\n"); + else + fail ("gnutls_check_version OK\n"); +} diff --git a/tests/utils.c b/tests/utils.c new file mode 100644 index 0000000000..bf49bcd528 --- /dev/null +++ b/tests/utils.c @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2004 Free Software Foundation + * + * This file is part of GNUTLS. + * + * GNUTLS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUTLS 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "utils.h" + +int debug = 0; +int error_count = 0; +int break_on_error = 0; + +void +fail (const char *format, ...) +{ + va_list arg_ptr; + + va_start (arg_ptr, format); + vfprintf (stderr, format, arg_ptr); + va_end (arg_ptr); + error_count++; + if (break_on_error) + exit (1); +} + +void +success (const char *format, ...) +{ + va_list arg_ptr; + + va_start (arg_ptr, format); + if (debug) + vfprintf (stdout, format, arg_ptr); + va_end (arg_ptr); +} + +void +escapeprint (const char *str, size_t len) +{ + size_t i; + + printf (" (length %d bytes):\n\t", len); + for (i = 0; i < len; i++) + { + if (((str[i] & 0xFF) >= 'A' && (str[i] & 0xFF) <= 'Z') || + ((str[i] & 0xFF) >= 'a' && (str[i] & 0xFF) <= 'z') || + ((str[i] & 0xFF) >= '0' && (str[i] & 0xFF) <= '9') + || (str[i] & 0xFF) == ' ' || (str[i] & 0xFF) == '.') + printf ("%c", (str[i] & 0xFF)); + else + printf ("\\x%02X", (str[i] & 0xFF)); + if ((i + 1) % 16 == 0 && (i + 1) < len) + printf ("'\n\t'"); + } + printf ("\n"); +} + +void +hexprint (const char *str, size_t len) +{ + size_t i; + + printf ("\t;; "); + for (i = 0; i < len; i++) + { + printf ("%02x ", (str[i] & 0xFF)); + if ((i + 1) % 8 == 0) + printf (" "); + if ((i + 1) % 16 == 0 && i + 1 < len) + printf ("\n\t;; "); + } + printf ("\n"); +} + +void +binprint (const char *str, size_t len) +{ + size_t i; + + printf ("\t;; "); + for (i = 0; i < len; i++) + { + printf ("%d%d%d%d%d%d%d%d ", + (str[i] & 0xFF) & 0x80 ? 1 : 0, + (str[i] & 0xFF) & 0x40 ? 1 : 0, + (str[i] & 0xFF) & 0x20 ? 1 : 0, + (str[i] & 0xFF) & 0x10 ? 1 : 0, + (str[i] & 0xFF) & 0x08 ? 1 : 0, + (str[i] & 0xFF) & 0x04 ? 1 : 0, + (str[i] & 0xFF) & 0x02 ? 1 : 0, (str[i] & 0xFF) & 0x01 ? 1 : 0); + if ((i + 1) % 3 == 0) + printf (" "); + if ((i + 1) % 6 == 0 && i + 1 < len) + printf ("\n\t;; "); + } + printf ("\n"); +} + +int +main (int argc, char *argv[]) +{ + do + if (strcmp (argv[argc - 1], "-v") == 0 || + strcmp (argv[argc - 1], "--verbose") == 0) + debug = 1; + else if (strcmp (argv[argc - 1], "-b") == 0 || + strcmp (argv[argc - 1], "--break-on-error") == 0) + break_on_error = 1; + else if (strcmp (argv[argc - 1], "-h") == 0 || + strcmp (argv[argc - 1], "-?") == 0 || + strcmp (argv[argc - 1], "--help") == 0) + { + printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", + argv[0]); + return 1; + } + while (argc-- > 1); + + doit (); + + if (debug) + printf ("Self test `%s' finished with %d errors\n", argv[0], error_count); + + return error_count ? 1 : 0; +} diff --git a/tests/utils.h b/tests/utils.h new file mode 100644 index 0000000000..94b099c1a6 --- /dev/null +++ b/tests/utils.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2004 Free Software Foundation + * + * This file is part of GNUTLS. + * + * GNUTLS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUTLS 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef UTILS_H +# define UTILS_H + +# include +# include +# include + +extern int debug; +extern int error_count; +extern int break_on_error; + +extern void fail (const char *format, ...); +extern void success (const char *format, ...); + +extern void escapeprint (const char *str, size_t len); +extern void hexprint (const char *str, size_t len); +extern void binprint (const char *str, size_t len); + +/* This must be implemented elsewhere. */ +extern void doit (void); + +#endif /* UTILS_H */