#
# 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
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
splay_SOURCES = splay.cc
+rfc1738_SOURCES = rfc1738.cc
+
## membanger won't link today. Bitrot..
##CC = gcc
##CFLAGS = -g -Wall -I../include -I../src
--- /dev/null
+
+/*
+ * $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 <robertc@squid-cache.org>
+ */
+
+#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;
+}
/*
- * $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
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
return a.i - b.i;
}
-void
-printintref (intnode const &a, void *unused)
-{
- printf("%d\n",a.i);
-}
-
void
destintref (intnode &)
{
int
main(int argc, char *argv[])
{
+ {
int i;
intnode *I;
/* test void * splay containers */
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<intnode *> *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 */
{
/* intnode */
SplayNode<intnode> *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;
}