From: robertc <> Date: Tue, 22 Apr 2003 07:37:44 +0000 (+0000) Subject: Summary: Add a RFC 1738 test program. X-Git-Tag: SQUID_3_0_PRE1~243 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=23087cb8461e0bcfbdd7d0a9556e78147691ed0f;p=thirdparty%2Fsquid.git Summary: Add a RFC 1738 test program. Keywords: Add a RFC 1738 test program. Summary: Make splay check silent. Keywords: Make splay check silent. --- diff --git a/test-suite/Makefile.am b/test-suite/Makefile.am index 28b2b54370..77a5463345 100644 --- a/test-suite/Makefile.am +++ b/test-suite/Makefile.am @@ -1,7 +1,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.am,v 1.4 2003/02/05 10:37:14 robertc Exp $ +# $Id: Makefile.am,v 1.5 2003/04/22 01:37:44 robertc Exp $ # AUTOMAKE_OPTIONS = subdir-objects @@ -11,13 +11,13 @@ AM_CXXFLAGS = -Werror -Wall INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src -EXTRA_PROGRAMS = mem_node_test membanger splay tcp-banger2 +EXTRA_PROGRAMS = mem_node_test membanger splay tcp-banger2 rfc1738 ## Sort by dependencies - test lowest layers first -TESTS = refcount splay mem_node_test http_range_test +TESTS = rfc1738 refcount splay mem_node_test http_range_test ## Sort by dependencies - test lowest layers first -check_PROGRAMS= refcount splay mem_node_test http_range_test +check_PROGRAMS= rfc1738 refcount splay mem_node_test http_range_test LDADD = -L$(top_builddir)/lib -lmiscutil mem_node_test_SOURCES = mem_node_test.cc @@ -38,6 +38,8 @@ http_range_test_LDADD = $(top_builddir)/src/HttpHdrRange.o \ splay_SOURCES = splay.cc +rfc1738_SOURCES = rfc1738.cc + ## membanger won't link today. Bitrot.. ##CC = gcc ##CFLAGS = -g -Wall -I../include -I../src diff --git a/test-suite/rfc1738.cc b/test-suite/rfc1738.cc new file mode 100644 index 0000000000..8598a8c554 --- /dev/null +++ b/test-suite/rfc1738.cc @@ -0,0 +1,79 @@ + +/* + * $Id: rfc1738.cc,v 1.1 2003/04/22 01:37:44 robertc Exp $ + * + * DEBUG: section xx RFC 1738 string [un]escaping + * AUTHOR: Robert Collins + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program 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. + * + * This program 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, USA. + * + * Copyright (c) 2003 Robert Collins + */ + +#include "squid.h" +#include "util.h" +/* testing: +SQUIDCEXTERN char *rfc1738_escape(const char *); +SQUIDCEXTERN char *rfc1738_escape_unescaped(const char *); +SQUIDCEXTERN char *rfc1738_escape_part(const char *); +SQUIDCEXTERN void rfc1738_unescape(char *); +*/ + +/* A corrupt string */ +#define BADSTRING "An Escaped %1" +/* A partly corrupt string */ +#define CASE1 "An escaped %1A%3" +#define RESULT1 "An escaped \032%3" +/* A non corrupt string */ +#define GOODSTRING "An Escaped %1A" +#define GOODUSTRING "An Escaped \032" + +void +testAString(char const *aString, char const *aResult) +{ + char *escapedString; + escapedString = xstrdup (aString); + rfc1738_unescape(escapedString); + if (strcmp(escapedString, aResult)) + exit (1); + safe_free (escapedString); +} + +void +testUnescaping() +{ + testAString(BADSTRING,BADSTRING); + testAString(GOODSTRING, GOODUSTRING); + testAString(CASE1, RESULT1); +} + +int +main (int argc, char **argv) +{ + testUnescaping(); + return 0; +} diff --git a/test-suite/splay.cc b/test-suite/splay.cc index 324fc80a3b..509d49bb03 100644 --- a/test-suite/splay.cc +++ b/test-suite/splay.cc @@ -1,5 +1,5 @@ /* - * $Id: splay.cc,v 1.2 2003/02/08 01:45:51 robertc Exp $ + * $Id: splay.cc,v 1.3 2003/04/22 01:37:44 robertc Exp $ * * based on ftp://ftp.cs.cmu.edu/user/sleator/splaying/top-down-splay.c * http://bobo.link.cs.cmu.edu/cgi-bin/splay/splay-cgi.pl @@ -38,17 +38,58 @@ compareint(intnode * const &a, intnode * const &b) return a->i - b->i; } +class SplayCheck +{ + public: + static void BeginWalk(); + static int LastValue; + static bool ExpectedFail; + static void WalkVoid(void *const &, void *); + static void WalkNode(intnode *const &, void *); + static void WalkNodeRef(intnode const &, void *); + static void CheckNode(intnode const &); +}; + +int SplayCheck::LastValue (0); +bool SplayCheck::ExpectedFail (false); + void -printintvoid(void * const &a, void *state) +SplayCheck::BeginWalk() { - intnode *A = (intnode *)a; - printf("%d\n", A->i); + LastValue = 0; } void -printint (intnode * const &a, void *state) +SplayCheck::WalkVoid(void *const &node, void *state) { - printf("%d\n",a->i); + intnode *A = (intnode *)node; + CheckNode(*A); +} + +void +SplayCheck::CheckNode(intnode const &A) +{ + if (LastValue > A.i) { + /* failure */ + if (!ExpectedFail) + exit (1); + } else + /* success */ + if (ExpectedFail) + exit (1); + LastValue = A.i; +} + +void +SplayCheck::WalkNode (intnode *const &a, void *state) +{ + CheckNode (*a); +} + +void +SplayCheck::WalkNodeRef (intnode const &a, void *state) +{ + CheckNode (a); } void @@ -70,12 +111,6 @@ compareintref(intnode const &a, intnode const &b) return a.i - b.i; } -void -printintref (intnode const &a, void *unused) -{ - printf("%d\n",a.i); -} - void destintref (intnode &) { @@ -84,6 +119,7 @@ destintref (intnode &) int main(int argc, char *argv[]) { + { int i; intnode *I; /* test void * splay containers */ @@ -94,24 +130,28 @@ main(int argc, char *argv[]) I->i = random(); top = splay_insert(I, top, compareintvoid); } - splay_walk(top, printintvoid, NULL); + SplayCheck::BeginWalk(); + splay_walk(top, SplayCheck::WalkVoid, NULL); - top->walk(printintvoid, NULL); + SplayCheck::BeginWalk(); + top->walk(SplayCheck::WalkVoid, NULL); top->destroy(destintvoid); /* check we don't segfault on NULL splay calls */ top = NULL; top->splay(NULL, compareintvoid); - + } /* test typesafe splay containers */ { /* intnode* */ SplayNode *safeTop = NULL; - for (i = 0; i < 100; i++) { + for ( int i = 0; i < 100; i++) { + intnode *I; I = new intnode; I->i = random(); safeTop = safeTop->insert(I, compareint); } - safeTop->walk(printint, NULL); + SplayCheck::BeginWalk(); + safeTop->walk(SplayCheck::WalkNode, NULL); safeTop->destroy(destint); /* check we don't segfault on NULL splay calls */ @@ -121,18 +161,28 @@ main(int argc, char *argv[]) { /* intnode */ SplayNode *safeTop = NULL; - for (i = 0; i < 100; i++) { + for (int i = 0; i < 100; i++) { intnode I; I.i = random(); safeTop = safeTop->insert(I, compareintref); } - safeTop->walk(printintref, NULL); + SplayCheck::BeginWalk(); + safeTop->walk(SplayCheck::WalkNodeRef, NULL); safeTop->destroy(destintref); /* check we don't segfault on NULL splay calls */ safeTop = NULL; safeTop->splay(intnode(), compareintref); - safeTop->walk(printintref, NULL); + SplayCheck::BeginWalk(); + safeTop->walk(SplayCheck::WalkNodeRef, NULL); } + /* check the check routine */ + SplayCheck::BeginWalk(); + intnode I; + I.i = 1; + SplayCheck::WalkNodeRef(I, NULL); + I.i = 0; + SplayCheck::ExpectedFail = true; + SplayCheck::WalkNodeRef(I, NULL); return 0; }