You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-cvs@httpd.apache.org by do...@apache.org on 2001/11/20 23:52:23 UTC
cvs commit: httpd-test/perl-framework/t/apache passbrigade.t
dougm 01/11/20 14:52:23
Added: perl-framework/c-modules/test_pass_brigade .cvsignore
mod_test_pass_brigade.c
perl-framework/t/apache passbrigade.t
Log:
adding a test for ap_pass_brigade
Revision Changes Path
1.1 httpd-test/perl-framework/c-modules/test_pass_brigade/.cvsignore
Index: .cvsignore
===================================================================
Makefile
.libs
*.lo
*.slo
*.la
1.1 httpd-test/perl-framework/c-modules/test_pass_brigade/mod_test_pass_brigade.c
Index: mod_test_pass_brigade.c
===================================================================
#define HTTPD_TEST_REQUIRE_APACHE 2
#if CONFIG_FOR_HTTPD_TEST
<Location /test_pass_brigade>
SetHandler test_pass_brigade
</Location>
#endif
#define APACHE_HTTPD_TEST_HANDLER test_pass_brigade_handler
#include "apache_httpd_test.h"
#include "apr_buckets.h"
/*
* mainly for testing / researching core_output_filter buffering
*/
static int test_pass_brigade_handler(request_rec *r)
{
const char *args = r->args;
long total=0, remaining=1;
char *buff, *endptr;
int buff_size = 8192;
if (strcmp(r->handler, "test_pass_brigade")) {
return DECLINED;
}
if (r->method_number != M_GET) {
return DECLINED;
}
if (args) {
buff_size = strtol(args, &endptr, 0);
if (endptr && *endptr == ',') {
++endptr;
remaining = strtol(endptr, &endptr, 0);
}
}
fprintf(stderr, "[mod_test_pass_brigade] "
"going to echo %ld bytes with buffer size=%d\n",
remaining, buff_size);
buff = malloc(buff_size);
memset(buff, 'a', buff_size);
while (total < remaining) {
int left = (remaining - total);
int len = left <= buff_size ? left : buff_size;
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
apr_bucket *bucket = apr_bucket_heap_create(buff, len, 1);
apr_status_t status;
APR_BRIGADE_INSERT_TAIL(bb, bucket);
status = ap_pass_brigade(r->output_filters->next, bb);
if (status != APR_SUCCESS) {
apr_brigade_destroy(bb);
ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO,
status, r->server,
"[mod_test_pass_brigade] ap_pass_brigade failed");
free(buff);
return HTTP_INTERNAL_SERVER_ERROR;
}
total += len;
fprintf(stderr, "[mod_test_pass_brigade] wrote %d of %d bytes\n",
len, len);
}
fprintf(stderr,
"[mod_test_pass_brigade] done writing %ld of %ld bytes\n",
total, remaining);
free(buff);
return OK;
}
APACHE_HTTPD_TEST_MODULE(test_pass_brigade);
1.1 httpd-test/perl-framework/t/apache/passbrigade.t
Index: passbrigade.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestRequest;
#1k..9k, 10k..50k, 100k, 300k, 500k, 2Mb, 4Mb, 6Mb, 10Mb
my @sizes = (1..9, 10..50, 100, 300, 500, 2000, 4000, 6000, 10_000);
my @buff_sizes = (1024, 8192);
plan tests => @sizes * @buff_sizes, [qw(test_pass_brigade LWP)];
my $location = "/test_pass_brigade";
for my $buff_size (@buff_sizes) {
for my $size (@sizes) {
my $length = $size * 1024;
print "getting $length bytes of data\n";
my $str = GET_BODY "$location?$buff_size,$length";
printf "read %d bytes of data\n", length $str;
my $chunk = 'a' x 1024;
ok $str =~ /^($chunk){$size}$/;
}
}