From: Doug MacEachern Date: Sun, 26 Aug 2001 06:01:59 +0000 (+0000) Subject: these modules were never built and had not been ported to 2.0 X-Git-Tag: 2.0.25~45 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0d0bbaa1ca54161f54ef7198572d5f57c4af635;p=apache these modules were never built and had not been ported to 2.0 they have been ported and moved to httpd-test PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90695 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/test/README b/modules/test/README index c61763c1dd..f122368a7f 100644 --- a/modules/test/README +++ b/modules/test/README @@ -1,3 +1 @@ -This directory is intended to house modules which are used for testing -server functionality. They're unsupported, and not guaranteed to remain -consistant between releases. You're on your own completely with these. +test modules have moved to httpd-test/perl-framework/c-modules diff --git a/modules/test/mod_rndchunk.c b/modules/test/mod_rndchunk.c deleted file mode 100644 index c987a48a57..0000000000 --- a/modules/test/mod_rndchunk.c +++ /dev/null @@ -1,179 +0,0 @@ -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2001 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 - * . - * - * Portions of this software are based upon public domain software - * originally written at the National Center for Supercomputing Applications, - * University of Illinois, Urbana-Champaign. - */ - -/* - * This module is intended to be used for testing chunked encoding. It - * generates a whole whack of output using ap_bputc() and ap_bputs(). It - * also exercises start_chunk() and end_chunk() in buff.c. To use it - * you should use a tool like netcat and the src/test/check_chunked - * tool. Add something like this to your access.conf file: - * - * - * SetHandler rndchunk - * - * - * Then fake requests such as: - * - * GET /rndchunk?0,1000000 HTTP/1.1 - * Host: localhost - * - * The first arg is the random seed, the second is the number of - * "things" to do. You should try a few seeds. - * - * You should also edit main/buff.c and change DEFAULT_BUFSIZE (and - * CHUNK_HEADER_SIZE). Small values are particularly useful for - * finding bugs. Try a few different values. - * - * -djg - */ - -#include "httpd.h" -#include "http_protocol.h" -#include "http_config.h" -#include "http_main.h" - -#define MAX_SEGMENT 32 -#define ONE_WEIGHT (256-32) - -static int send_rndchunk(request_rec *r) -{ - const char *args; - char *endptr; - unsigned int seed; - unsigned int count; - int i; - char buf[MAX_SEGMENT + 1]; - unsigned int len; - - r->allowed |= (AP_METHOD_BIT << M_GET); - if (r->method_number != M_GET) - return DECLINED; - - r->content_type = "text/html"; - if(r->header_only) { - return 0; - } - ap_hard_timeout("send_rndchunk", r); - - if (!r->chunked) { - ap_rputs("Not chunked!", r); - ap_kill_timeout(r); - return 0; - } - - args = r->args; - if (!args) { -error: - ap_rputs("Must include args! ... of the form ?seed,count", r); - ap_kill_timeout(r); - return 0; - } - seed = strtol(args, &endptr, 0); - if (!endptr || *endptr != ',') { - goto error; - } - ++endptr; - count = strtol(endptr, &endptr, 0); - - srandom(seed); - for (i = 0; i < count; ++i) { - len = random() % (MAX_SEGMENT + ONE_WEIGHT); - if (len >= MAX_SEGMENT) { - ap_rputc((i & 1) ? '0' : '1', r); - } - else if (len == 0) { - /* not a really nice thing to do, but we need to test - * beginning/ending chunks as well - */ - ap_bsetflag(r->connection->client, B_CHUNK, 0); - ap_bsetflag(r->connection->client, B_CHUNK, 1); - } - else { - memset(buf, '2' + len, len); - buf[len] = 0; - ap_rputs(buf, r); - } - } - ap_kill_timeout(r); - return 0; -} - -static const handler_rec rndchunk_handlers[] = -{ - {"rndchunk", send_rndchunk}, - {NULL} -}; - -module rndchunk_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - NULL, /* dir config creater */ - NULL, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - NULL, /* command apr_table_t */ - rndchunk_handlers, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - NULL, /* fixups */ - NULL, /* logger */ - NULL /* header parser */ -}; diff --git a/modules/test/mod_test_util_uri.c b/modules/test/mod_test_util_uri.c deleted file mode 100644 index 45ca811ae9..0000000000 --- a/modules/test/mod_test_util_uri.c +++ /dev/null @@ -1,354 +0,0 @@ -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2001 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 - * . - * - * Portions of this software are based upon public domain software - * originally written at the National Center for Supercomputing Applications, - * University of Illinois, Urbana-Champaign. - */ - -/* - * This module is intended to test the util_uri routines by parsing a - * bunch of urls and comparing the results with what we expect to - * see. - * - * Usage: - * - * - * SetHandler test-util-uri - * - * - * Then make a request to /test-util-uri. An html apr_table_t of errors will - * be output... and a total count of errors. - */ - -#include "httpd.h" -#include "http_protocol.h" -#include "http_config.h" -#include "http_main.h" - -typedef struct { - const char *scheme; - const char *user; - const char *password; - const char *hostname; - const char *port_str; - const char *path; - const char *query; - const char *fragment; -} test_uri_t; - -#define T_scheme 0x01 -#define T_user 0x02 -#define T_password 0x04 -#define T_hostname 0x08 -#define T_port_str 0x10 -#define T_path 0x20 -#define T_query 0x40 -#define T_fragment 0x80 -#define T_MAX 0x100 - -/* The idea is that we list here a bunch of url pieces that we want - * stitched together in every way that's valid. - */ -static const test_uri_t uri_tests[] = { - { "http", "userid", "passwd", "hostname.goes.here", "80", "/path/goes/here", "query-here", "frag-here" }, - { "http", "", "passwd", "hostname.goes.here", "80", "/path/goes/here", "query-here", "frag-here" }, - { "http", "userid", "", "hostname.goes.here", "80", "/path/goes/here", "query-here", "frag-here" }, - { "http", "userid", "passwd", "", "80", "/path/goes/here", "query-here", "frag-here" }, - { "http", "userid", "passwd", "hostname.goes.here", "", "/path/goes/here", "query-here", "frag-here" }, -#if 0 - /* An empty path means two different things depending on whether this is a - * relative or an absolute uri... consider versus "GET - * http://hostname HTTP/1.1". So this is why parse_uri_components returns - * a NULL for path when it doesn't find one, instead of returning an empty - * string. - * - * We don't really need to test it explicitly since path has no explicit - * character that indicates its presence, and so we test empty paths all - * the time by varying T_path in the loop. It would just cost us extra - * code to special case the empty path string... - */ - { "http", "userid", "passwd", "hostname.goes.here", "80", "", "query-here", "frag-here" }, -#endif - { "http", "userid", "passwd", "hostname.goes.here", "80", "/path/goes/here", "", "frag-here" }, - { "http", "userid", "passwd", "hostname.goes.here", "80", "/path/goes/here", "query-here", "" }, - { "https", "user@d", "pa:swd", "hostname.goes.here.", "", "/~path/goes/here", "query&query?crud", "frag-here?baby" } - -}; - -static char *my_stpcpy(char *d, const char *s) -{ - while((*d = *s)) { - ++d; - ++s; - } - return d; -} - -/* return the number of failures */ -static unsigned iterate_pieces(request_rec *r, const test_uri_t *pieces, int row) -{ - unsigned u; - apr_pool_t *sub; - char *input_uri; - char *strp; - apr_uri_t result; - unsigned expect; - int status; - unsigned failures; - - failures = 0; - - input_uri = apr_palloc(r->pool, - strlen(pieces->scheme) + 3 - + strlen(pieces->user) + 1 - + strlen(pieces->password) + 1 - + strlen(pieces->hostname) + 1 - + strlen(pieces->port_str) + 1 - + strlen(pieces->path) + - + strlen(pieces->query) + 1 - + strlen(pieces->fragment) + 1 - + 1); - - for (u = 0; u < T_MAX; ++u) { - strp = input_uri; - expect = 0; - - /* a scheme requires a hostinfo and vice versa */ - /* a hostinfo requires a hostname */ - if (u & (T_scheme|T_user|T_password|T_hostname|T_port_str)) { - expect |= T_scheme; - strp = my_stpcpy(strp, pieces->scheme); - *strp++ = ':'; - *strp++ = '/'; - *strp++ = '/'; - /* can't have password without user */ - if (u & (T_user|T_password)) { - expect |= T_user; - strp = my_stpcpy(strp, pieces->user); - if (u & T_password) { - expect |= T_password; - *strp++ = ':'; - strp = my_stpcpy(strp, pieces->password); - } - *strp++ = '@'; - } - expect |= T_hostname; - strp = my_stpcpy(strp, pieces->hostname); - if (u & T_port_str) { - expect |= T_port_str; - *strp++ = ':'; - strp = my_stpcpy(strp, pieces->port_str); - } - } - if (u & T_path) { - expect |= T_path; - strp = my_stpcpy(strp, pieces->path); - } - if (u & T_query) { - expect |= T_query; - *strp++ = '?'; - strp = my_stpcpy(strp, pieces->query); - } - if (u & T_fragment) { - expect |= T_fragment; - *strp++ = '#'; - strp = my_stpcpy(strp, pieces->fragment); - } - *strp = 0; - - apr_pool_sub_make(&sub, r->pool, NULL); - status = apr_uri_parse(sub, input_uri, &result); - if (status == APR_SUCCESS) { -#define CHECK(f) \ - if ((expect & T_##f) \ - && (result.f == NULL || strcmp(result.f, pieces->f))) { \ - status = HTTP_INTERNAL_SERVER_ERROR; \ - } \ - else if (!(expect & T_##f) && result.f != NULL) { \ - status = HTTP_INTERNAL_SERVER_ERROR; \ - } - CHECK(scheme) - CHECK(user) - CHECK(password) - CHECK(hostname) - CHECK(port_str) - CHECK(path) - CHECK(query) - CHECK(fragment) -#undef CHECK - } - if (status != APR_SUCCESS) { - ap_rprintf(r, "%d0x%02x0x%02x%d\"%s\"", row, u, expect, status, input_uri); -#define DUMP(f) \ - if (result.f) { \ - ap_rvputs(r, "\"", result.f, "\"
", NULL); \ - } \ - else { \ - ap_rputs("NULL
", r); \ - } \ - if (expect & T_##f) { \ - ap_rvputs(r, "\"", pieces->f, "\"", NULL); \ - } \ - else { \ - ap_rputs("NULL", r); \ - } - DUMP(scheme); - DUMP(user); - DUMP(password); - DUMP(hostname); - DUMP(port_str); - DUMP(path); - DUMP(query); - DUMP(fragment); -#undef DUMP - ap_rputs("\n", r); - ++failures; - } - apr_pool_destroy(sub); - } - return failures; -} - -static int test_util_uri(request_rec *r) -{ - unsigned total_failures; - int i; - - r->allowed |= (AP_METHOD_BIT << M_GET); - if (r->method_number != M_GET) - return DECLINED; - - r->content_type = "text/html"; - if(r->header_only) { - return 0; - } - ap_hard_timeout("test_util_uri", r); - - ap_rputs( -DOCTYPE_HTML_2_0 " - -

Key: -

-
row -
entry number in the uri_tests array -
u -
fields under test -
expected -
fields expected in the result -
status -
response from parse_uri_components, or 500 if unexpected results -
input uri -
the uri given to parse_uri_components -
-

The remaining fields are the pieces returned from parse_uri_components, and -the values we expected for each piece (resp.). -

Only failures are displayed. -

-", r); -#define HEADER(f) ap_rprintf(r, "", T_##f) - HEADER(scheme); - HEADER(user); - HEADER(password); - HEADER(hostname); - HEADER(port_str); - HEADER(path); - HEADER(query); - HEADER(fragment); -#undef HEADER - - if (r->args) { - i = atoi(r->args); - total_failures = iterate_pieces(r, &uri_tests[i], i); - } - else { - total_failures = 0; - for (i = 0; i < sizeof(uri_tests) / sizeof(uri_tests[0]); ++i) { - total_failures += iterate_pieces(r, &uri_tests[i], i); - if (total_failures > 256) { - ap_rprintf(r, "
rowuexpectstatusinput uri" #f "
0x%02x
\nStopped early to save your browser " - "from certain death!\nTOTAL FAILURES = %u\n", - total_failures); - return OK; - } - } - } - ap_rprintf(r, "\nTOTAL FAILURES = %u\n", total_failures); - - return OK; -} - -static const handler_rec test_util_uri_handlers[] = -{ - {"test-util-uri", test_util_uri}, - {NULL} -}; - -module test_util_uri_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - NULL, /* dir config creater */ - NULL, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - NULL, /* command apr_table_t */ - test_util_uri_handlers, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - NULL, /* fixups */ - NULL, /* logger */ - NULL /* header parser */ -};