You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by jo...@apache.org on 2003/04/21 20:45:59 UTC
cvs commit: httpd-apreq-2/t cookie.c Makefile.am env.c tables.c test_apreq.h testall.c
joes 2003/04/21 11:45:58
Modified: src apreq_cookie.c
t Makefile.am env.c tables.c test_apreq.h testall.c
Added: t cookie.c
Log:
Add cookie tests; cookie bugfixes.
Revision Changes Path
1.10 +15 -13 httpd-apreq-2/src/apreq_cookie.c
Index: apreq_cookie.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/src/apreq_cookie.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- apreq_cookie.c 12 Apr 2003 01:45:30 -0000 1.9
+++ apreq_cookie.c 21 Apr 2003 18:45:57 -0000 1.10
@@ -392,6 +392,8 @@
if (status == APR_SUCCESS) {
c = apreq_make_cookie(ctx, version, name, nlen,
value, vlen);
+ apreq_log(APREQ_DEBUG status, ctx,
+ "adding cookie: %s => %s", c->v.name, c->v.data);
apreq_add_cookie(j, c);
}
else {
@@ -405,6 +407,7 @@
return j;
}
+
APREQ_DECLARE(int) apreq_serialize_cookie(char *buf, apr_size_t len,
const apreq_cookie_t *c)
{
@@ -424,25 +427,29 @@
#define ADD_ATTR(name) do { strcpy(f,c->name ? "; " #name "=%s" : \
"%.0s"); f+= strlen(f); } while (0)
+#define NONNULL(attr) (attr ? attr : "")
- if (c->version == NETSCAPE) {
+ if (c->version == NETSCAPE) {
+
ADD_ATTR(path);
ADD_ATTR(domain);
- strcpy(f, c->time.expires ? "; expires=%s" : "%.0s");
+ strcpy(f, c->time.expires ? "; expires=%s" : "");
f += strlen(f);
if (c->secure)
strcpy(f, "; secure");
return apr_snprintf(buf, len, format, c->v.name, c->v.data,
- c->path, c->domain, c->time.expires);
+ NONNULL(c->path), NONNULL(c->domain), c->time.expires);
}
/* c->version == RFC */
- ADD_ATTR(version);
+ strcpy(f,"; Version=%d");
+ f += strlen(f);
+
ADD_ATTR(path);
ADD_ATTR(domain);
ADD_ATTR(port);
@@ -451,13 +458,7 @@
#undef ADD_ATTR
- /* "%.0s" very hackish, but it should be safe. max_age is
- * the last va_arg, and we're not actually printing it in
- * the "%.0s" case. Should check the apr_snprintf implementation
- * just for certainty though.
- */
-
- strcpy(f, c->time.max_age >= 0 ? "; max-age=%ld" : "%.0s");
+ strcpy(f, c->time.max_age >= 0 ? "; max-age=%ld" : "");
f += strlen(f);
@@ -465,8 +466,9 @@
strcpy(f, "; secure");
return apr_snprintf(buf, len, format, c->v.name, c->v.data,
- c->version, c->path, c->domain, c->port,
- c->comment, c->commentURL, c->time.max_age);
+ c->version, NONNULL(c->path), NONNULL(c->domain),
+ NONNULL(c->port), NONNULL(c->comment),
+ NONNULL(c->commentURL), c->time.max_age);
}
1.4 +1 -1 httpd-apreq-2/t/Makefile.am
Index: Makefile.am
===================================================================
RCS file: /home/cvs/httpd-apreq-2/t/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Makefile.am 19 Apr 2003 09:42:08 -0000 1.3
+++ Makefile.am 21 Apr 2003 18:45:57 -0000 1.4
@@ -2,7 +2,7 @@
LIBS = -L../src
noinst_LIBRARIES = libapreq_tests.a
-libapreq_tests_a_SOURCES = CuTest.c env.c tables.c
+libapreq_tests_a_SOURCES = CuTest.c env.c tables.c cookie.c
libapreq_tests_a_LIBADD = ../src/libapreq.la
check_PROGRAMS = testall
1.4 +17 -5 httpd-apreq-2/t/env.c
Index: env.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/t/env.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- env.c 21 Apr 2003 04:29:47 -0000 1.3
+++ env.c 21 Apr 2003 18:45:57 -0000 1.4
@@ -60,9 +60,8 @@
#include "apr_lib.h"
#include "apr_strings.h"
-
#include <stdlib.h>
-#include <stdio.h>
+#include "test_apreq.h"
#define dENV struct env_ctx *env = (struct env_ctx *)ctx
@@ -80,8 +79,7 @@
static apr_pool_t *env_pool(void *ctx)
{
- dENV;
- return env->pool;
+ return p;
}
static const char *env_in(void *ctx, const char *name)
@@ -128,6 +126,20 @@
return NULL;
}
+static int loglevel = 10;
+APREQ_LOG(env_log)
+{
+ va_list vp;
+
+ if (level < loglevel)
+ return;
+
+ va_start(vp, fmt);
+ fprintf(stderr, "[%s(%d)] %s\n", file, line, apr_pvsprintf(p,fmt,vp));
+ va_end(vp);
+
+}
+
static int dump_table(void *ctx, const char *key, const char *value)
{
@@ -148,6 +160,6 @@
env_jar,
env_request,
env_cfg,
- NULL
+ env_log
};
1.6 +20 -3 httpd-apreq-2/t/tables.c
Index: tables.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/t/tables.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- tables.c 21 Apr 2003 16:09:10 -0000 1.5
+++ tables.c 21 Apr 2003 18:45:57 -0000 1.6
@@ -110,10 +110,27 @@
{
const char *val;
- apreq_table_add(t1, V("addkey", "bar"));
- apreq_table_add(t1, V("addkey", "foo"));
- val = apreq_table_get(t1, "addkey");
+ apreq_table_add(t1, V("add", "bar"));
+ apreq_table_add(t1, V("add", "foo"));
+ val = apreq_table_get(t1, "add");
CuAssertStrEquals(tc, "bar", val);
+ apreq_table_add(t1, V("fl", "left"));
+ apreq_table_add(t1, V("fr", "right"));
+ apreq_table_add(t1, V("fll", "left-left"));
+ apreq_table_add(t1, V("frr", "right-right"));
+ apreq_table_add(t1, V("frl", "right-left"));
+ apreq_table_add(t1, V("flr", "left-right"));
+ apreq_table_add(t1, V("b", "bah"));
+ val = apreq_table_get(t1, "foo");
+ CuAssertStrEquals(tc, "bar", val);
+ val = apreq_table_get(t1, "fl");
+ CuAssertStrEquals(tc, "left", val);
+ val = apreq_table_get(t1, "fr");
+ CuAssertStrEquals(tc, "right", val);
+ val = apreq_table_get(t1, "fll");
+ CuAssertStrEquals(tc, "left-left", val);
+ val = apreq_table_get(t1, "frl");
+ CuAssertStrEquals(tc, "right-left", val);
}
1.2 +1 -28 httpd-apreq-2/t/test_apreq.h
Index: test_apreq.h
===================================================================
RCS file: /home/cvs/httpd-apreq-2/t/test_apreq.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- test_apreq.h 19 Apr 2003 16:21:31 -0000 1.1
+++ test_apreq.h 21 Apr 2003 18:45:57 -0000 1.2
@@ -66,35 +66,8 @@
CuSuite *getsuite(void);
-CuSuite *teststr(void);
-CuSuite *testtime(void);
-CuSuite *testvsn(void);
-CuSuite *testipsub(void);
-CuSuite *testmmap(void);
-CuSuite *testud(void);
CuSuite *testtable(void);
-CuSuite *testhash(void);
-CuSuite *testsleep(void);
-CuSuite *testpool(void);
-CuSuite *testfmt(void);
-CuSuite *testfile(void);
-CuSuite *testdir(void);
-CuSuite *testfileinfo(void);
-CuSuite *testrand(void);
-CuSuite *testdso(void);
-CuSuite *testoc(void);
-CuSuite *testdup(void);
-CuSuite *testsockets(void);
-CuSuite *testproc(void);
-CuSuite *testpoll(void);
-CuSuite *testlock(void);
-CuSuite *testsockopt(void);
-CuSuite *testpipe(void);
-CuSuite *testthread(void);
-CuSuite *testgetopt(void);
-CuSuite *testnames(void);
-CuSuite *testuser(void);
-CuSuite *testpath(void);
+CuSuite *testcookie(void);
CuSuite *testenv(void);
/* Assert that RV is an APR_SUCCESS value; else fail giving strerror
1.4 +1 -29 httpd-apreq-2/t/testall.c
Index: testall.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/t/testall.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- testall.c 19 Apr 2003 16:21:31 -0000 1.3
+++ testall.c 21 Apr 2003 18:45:57 -0000 1.4
@@ -78,36 +78,8 @@
const char *testname;
CuSuite *(*func)(void);
} tests[] = {
-/* {"teststr", teststr},
- {"testtime", testtime},
- {"testvsn", testvsn},
- {"testipsub", testipsub},
- {"testmmap", testmmap},
- {"testud", testud}, */
{"tables", testtable},
-/* {"testhash", testhash},
- {"testsleep", testsleep},
- {"testpool", testpool},
- {"testfmt", testfmt},
- {"testfile", testfile},
- {"testfileinfo", testfileinfo},
- {"testpipe", testpipe},
- {"testdup", testdup},
- {"testdir", testdir},
- {"testrand", testrand},
- {"testdso", testdso},
- {"testoc", testoc},
- {"testsockets", testsockets},
- {"testsockopt", testsockopt},
- {"testproc", testproc},
- {"testpoll", testpoll},
- {"testlock", testlock},
- {"testthread", testthread},
- {"testargs", testgetopt},
- {"testnames", testnames},
- {"testuser", testuser},
- {"testpath", testpath},
- {"testenv", testenv}, */
+ {"cookies", testcookie},
{"LastTest", NULL}
};
1.1 httpd-apreq-2/t/cookie.c
Index: cookie.c
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
#include "apreq_env.h"
#include "test_apreq.h"
#include "apreq.h"
#include "apreq_cookie.h"
#include "apr_strings.h"
static apreq_jar_t *j = NULL;
static void jar_make(CuTest *tc)
{
j = apreq_jar(p,"a=1; foo=bar; fl=left; fr=right; frl=right-left; flr=left-right; fll=left-left; b=2");
CuAssertPtrNotNull(tc, j);
}
static void jar_table_get(CuTest *tc)
{
const char *val;
val = apreq_table_get(j,"a");
CuAssertStrEquals(tc,"1",val);
val = apreq_table_get(j,"b");
CuAssertStrEquals(tc,"2",val);
val = apreq_table_get(j,"foo");
CuAssertStrEquals(tc,"bar",val);
val = apreq_table_get(j,"fl");
CuAssertStrEquals(tc,"left",val);
val = apreq_table_get(j,"fr");
CuAssertStrEquals(tc,"right",val);
val = apreq_table_get(j,"frl");
CuAssertStrEquals(tc,"right-left",val);
val = apreq_table_get(j,"flr");
CuAssertStrEquals(tc,"left-right",val);
val = apreq_table_get(j,"fll");
CuAssertStrEquals(tc,"left-left",val);
}
static void netscape_cookie(CuTest *tc)
{
apreq_cookie_t *c;
apreq_cookie_version_t version = NETSCAPE;
char *expires = apreq_expires(p,"+1y", NSCOOKIE);
c = apreq_cookie(j,"foo");
CuAssertStrEquals(tc,"bar",apreq_cookie_value(c));
CuAssertIntEquals(tc, version,c->version);
CuAssertStrEquals(tc,"foo=bar", apreq_cookie_as_string(p,c));
c->domain = apr_pstrdup(p, "example.com");
CuAssertStrEquals(tc,"foo=bar; domain=example.com",
apreq_cookie_as_string(p,c));
c->path = apr_pstrdup(p, "/quux");
CuAssertStrEquals(tc, "foo=bar; path=/quux; domain=example.com",
apreq_cookie_as_string(p,c));
apreq_cookie_expires(c, "+1y");
CuAssertStrEquals(tc,apr_pstrcat(p,
"foo=bar; path=/quux; domain=example.com; expires=",
expires, NULL), apreq_cookie_as_string(p,c));
}
static void rfc_cookie(CuTest *tc)
{
apreq_cookie_t *c = apreq_make_cookie(NULL,RFC,"rfc",3,"out",3);
apreq_cookie_version_t version = RFC;
long expires = apreq_atol("+3m");
CuAssertStrEquals(tc,"out",apreq_cookie_value(c));
CuAssertIntEquals(tc, version,c->version);
CuAssertStrEquals(tc,"rfc=out; Version=1", apreq_cookie_as_string(p,c));
c->domain = apr_pstrdup(p, "example.com");
CuAssertStrEquals(tc,"rfc=out; Version=1; domain=example.com",
apreq_cookie_as_string(p,c));
c->path = apr_pstrdup(p, "/quux");
CuAssertStrEquals(tc,
"rfc=out; Version=1; path=/quux; domain=example.com",
apreq_cookie_as_string(p,c));
apreq_cookie_expires(c, "+3m");
CuAssertStrEquals(tc,apr_psprintf(p,
"rfc=out; Version=1; path=/quux; domain=example.com; max-age=%ld",
expires), apreq_cookie_as_string(p,c));
}
CuSuite *testcookie(void)
{
CuSuite *suite = CuSuiteNew("Cookie");
SUITE_ADD_TEST(suite, jar_make);
SUITE_ADD_TEST(suite, jar_table_get);
SUITE_ADD_TEST(suite, netscape_cookie);
SUITE_ADD_TEST(suite, rfc_cookie);
return suite;
}