You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2002/10/07 18:35:00 UTC
cvs commit: apr-util/test testuri.c .cvsignore Makefile.in
trawick 2002/10/07 09:35:00
Modified: test .cvsignore Makefile.in
Added: test testuri.c
Log:
add a URI parser test program
some work needs to be done to the URI code to support IPv6 literal
addresses, at which point a test program will be very useful
see PR 11887
Revision Changes Path
1.8 +1 -0 apr-util/test/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /home/cvs/apr-util/test/.cvsignore,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- .cvsignore 18 Aug 2002 20:41:08 -0000 1.7
+++ .cvsignore 7 Oct 2002 16:34:59 -0000 1.8
@@ -11,6 +11,7 @@
testqueue
testreslist
testrmm
+testuri
testuuid
teststrmatch
testdate
1.34 +5 -1 apr-util/test/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apr-util/test/Makefile.in,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Makefile.in 10 Sep 2002 10:10:51 -0000 1.33
+++ Makefile.in 7 Oct 2002 16:34:59 -0000 1.34
@@ -3,7 +3,7 @@
INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@
PROGRAMS = testdbm testdate testmd4 testmd5 testxml testrmm teststrmatch \
- testuuid testreslist testqueue
+ testuuid testreslist testqueue testuri
TARGETS = $(PROGRAMS)
APRUTIL_DOTTED_VERSION=@APRUTIL_DOTTED_VERSION@
@@ -75,4 +75,8 @@
testqueue: $(testqueue_OBJECTS) $(testqueue_LDADD)
$(LINK) $(testqueue_OBJECTS) $(testqueue_LDADD) $(PROGRAM_DEPENDENCIES)
+testuri_OBJECTS = testuri.lo
+testuri_LDADD = $(TARGET_LIB_PATH)
+testuri: $(testuri_OBJECTS) $(testuri_LDADD)
+ $(LINK) $(testuri_OBJECTS) $(testuri_LDADD) $(PROGRAM_DEPENDENCIES)
1.1 apr-util/test/testuri.c
Index: testuri.c
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2002 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 <stdio.h>
#include <stdlib.h>
#include "apr_general.h"
#include "apr_uri.h"
struct aup_test {
const char *uri;
apr_status_t rv;
const char *scheme;
const char *hostinfo;
const char *user;
const char *password;
const char *hostname;
const char *port_str;
const char *path;
const char *query;
const char *fragment;
apr_port_t port;
};
struct aup_test aup_tests[] =
{
{
"http://127.0.0.1:9999/asdf.html",
0, "http", "127.0.0.1:9999", NULL, NULL, "127.0.0.1", "9999", "/asdf.html", NULL, NULL, 9999
},
{
"/error/include/top.html",
0, NULL, NULL, NULL, NULL, NULL, NULL, "/error/include/top.html", NULL, NULL, 0
},
{
"/error/include/../contact.html.var",
0, NULL, NULL, NULL, NULL, NULL, NULL, "/error/include/../contact.html.var", NULL, NULL, 0
},
{
"/",
0, NULL, NULL, NULL, NULL, NULL, NULL, "/", NULL, NULL, 0
},
{
"/manual/",
0, NULL, NULL, NULL, NULL, NULL, NULL, "/manual/", NULL, NULL, 0
},
{
"/cocoon/developing/graphics/Using%20Databases-label_over.jpg",
0, NULL, NULL, NULL, NULL, NULL, NULL, "/cocoon/developing/graphics/Using%20Databases-label_over.jpg", NULL, NULL, 0
},
{
"http://sonyamt:garbage@127.0.0.1/filespace/",
0, "http", "sonyamt:garbage@127.0.0.1", "sonyamt", "garbage", "127.0.0.1", NULL, "/filespace/", NULL, NULL, 0
},
{
"http://sonyamt@127.0.0.1/filespace/?arg1=store",
0, "http", "sonyamt@127.0.0.1", "sonyamt", NULL, "127.0.0.1", NULL, "/filespace/", "arg1=store", NULL, 0
}
};
static void show_info(apr_status_t rv, apr_status_t expected, const apr_uri_t *info)
{
if (rv != expected) {
fprintf(stderr, " actual rv: %d expected rv: %d\n", rv, expected);
}
else {
fprintf(stderr,
" scheme: %s\n"
" hostinfo: %s\n"
" user: %s\n"
" password: %s\n"
" hostname: %s\n"
" port_str: %s\n"
" path: %s\n"
" query: %s\n"
" fragment: %s\n"
" hostent: %p\n"
" port: %u\n"
" is_initialized: %u\n"
" dns_looked_up: %u\n"
" dns_resolved: %u\n",
info->scheme, info->hostinfo, info->user, info->password,
info->hostname, info->port_str, info->path, info->query,
info->fragment, info->hostent, info->port, info->is_initialized,
info->dns_looked_up, info->dns_resolved);
}
}
static int same_str(const char *s1, const char *s2)
{
if (s1 == s2) { /* e.g., NULL and NULL */
return 1;
}
else if (!s1 || !s2) { /* only 1 is NULL */
return 0;
}
else {
return strcmp(s1, s2) == 0;
}
}
static int test_aup(apr_pool_t *p)
{
int i;
apr_status_t rv;
apr_uri_t info;
struct aup_test *t;
const char *failed;
int rc = 0;
for (i = 0; i < sizeof(aup_tests) / sizeof(aup_tests[0]); i++) {
memset(&info, 0, sizeof(info));
t = &aup_tests[i];
rv = apr_uri_parse(p, t->uri, &info);
failed = (rv != t->rv) ? "bad rc" : NULL;
if (!failed) {
if (!same_str(info.scheme, t->scheme))
failed = "bad scheme";
if (!same_str(info.hostinfo, t->hostinfo))
failed = "bad hostinfo";
if (!same_str(info.user, t->user))
failed = "bad user";
if (!same_str(info.password, t->password))
failed = "bad password";
if (!same_str(info.hostname, t->hostname))
failed = "bad hostname";
if (!same_str(info.port_str, t->port_str))
failed = "bad port_str";
if (!same_str(info.path, t->path))
failed = "bad path";
if (!same_str(info.query, t->query))
failed = "bad query";
if (!same_str(info.fragment, t->fragment))
failed = "bad fragment";
if (info.port != t->port)
failed = "bad port";
}
if (failed) {
++rc;
fprintf(stderr, "failure for testcase %d/uri %s: %s\n", i,
t->uri, failed);
show_info(rv, t->rv, &info);
}
}
return rc;
}
int main(void)
{
apr_pool_t *pool;
int rc;
apr_initialize();
atexit(apr_terminate);
apr_pool_create(&pool, NULL);
rc = test_aup(pool);
return rc;
}