]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Summary: Add a RFC 1738 test program.
authorrobertc <>
Tue, 22 Apr 2003 07:37:44 +0000 (07:37 +0000)
committerrobertc <>
Tue, 22 Apr 2003 07:37:44 +0000 (07:37 +0000)
Keywords:

Add a RFC 1738 test program.

Summary: Make splay check silent.
Keywords:

Make splay check silent.

test-suite/Makefile.am
test-suite/rfc1738.cc [new file with mode: 0644]
test-suite/splay.cc

index 28b2b5437022390a76633e87c97bfc005bfd70a6..77a5463345f11b9ad6ec9b2e23afaef2299176e7 100644 (file)
@@ -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 (file)
index 0000000..8598a8c
--- /dev/null
@@ -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 <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;
+}
index 324fc80a3bbae565d737d11d8d8089084ac5dc3c..509d49bb0392a7e1ec29b62d26edd92fa9cf1e0b 100644 (file)
@@ -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<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 */
@@ -121,18 +161,28 @@ main(int argc, char *argv[])
       {
     /* 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;
 }