summaryrefslogtreecommitdiffstats
path: root/rubbos/app/httpd-2.0.64/test
diff options
context:
space:
mode:
authorhongbotian <hongbo.tianhongbo@huawei.com>2015-11-30 03:10:21 -0500
committerhongbotian <hongbo.tianhongbo@huawei.com>2015-11-30 03:10:21 -0500
commitc0b7206652b2852bc574694e7ba07ba1c2acdc00 (patch)
tree5cb95cb0e19e03610525903df46279df2c3b7eb1 /rubbos/app/httpd-2.0.64/test
parentb6d3d6e668b793220f2d3af1bc3e828553dc3fe6 (diff)
delete app
Change-Id: Id4c572809969ebe89e946e88063eaed262cff3f2 Signed-off-by: hongbotian <hongbo.tianhongbo@huawei.com>
Diffstat (limited to 'rubbos/app/httpd-2.0.64/test')
-rw-r--r--rubbos/app/httpd-2.0.64/test/.deps0
-rw-r--r--rubbos/app/httpd-2.0.64/test/.indent.pro54
-rw-r--r--rubbos/app/httpd-2.0.64/test/Makefile25
-rw-r--r--rubbos/app/httpd-2.0.64/test/Makefile.in20
-rw-r--r--rubbos/app/httpd-2.0.64/test/README3
-rw-r--r--rubbos/app/httpd-2.0.64/test/check_chunked58
-rw-r--r--rubbos/app/httpd-2.0.64/test/cls.c182
-rw-r--r--rubbos/app/httpd-2.0.64/test/tcpdumpscii.txt50
-rw-r--r--rubbos/app/httpd-2.0.64/test/test-writev.c101
-rw-r--r--rubbos/app/httpd-2.0.64/test/test_find.c78
-rw-r--r--rubbos/app/httpd-2.0.64/test/test_limits.c200
-rw-r--r--rubbos/app/httpd-2.0.64/test/test_parser.c75
-rw-r--r--rubbos/app/httpd-2.0.64/test/test_select.c46
-rw-r--r--rubbos/app/httpd-2.0.64/test/time-sem.c588
-rw-r--r--rubbos/app/httpd-2.0.64/test/zb.c567
15 files changed, 0 insertions, 2047 deletions
diff --git a/rubbos/app/httpd-2.0.64/test/.deps b/rubbos/app/httpd-2.0.64/test/.deps
deleted file mode 100644
index e69de29b..00000000
--- a/rubbos/app/httpd-2.0.64/test/.deps
+++ /dev/null
diff --git a/rubbos/app/httpd-2.0.64/test/.indent.pro b/rubbos/app/httpd-2.0.64/test/.indent.pro
deleted file mode 100644
index a9fbe9f9..00000000
--- a/rubbos/app/httpd-2.0.64/test/.indent.pro
+++ /dev/null
@@ -1,54 +0,0 @@
--i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1
--TBUFF
--TFILE
--TTRANS
--TUINT4
--T_trans
--Tallow_options_t
--Tapache_sfio
--Tarray_header
--Tbool_int
--Tbuf_area
--Tbuff_struct
--Tbuffy
--Tcmd_how
--Tcmd_parms
--Tcommand_rec
--Tcommand_struct
--Tconn_rec
--Tcore_dir_config
--Tcore_server_config
--Tdir_maker_func
--Tevent
--Tglobals_s
--Thandler_func
--Thandler_rec
--Tjoblist_s
--Tlisten_rec
--Tmerger_func
--Tmode_t
--Tmodule
--Tmodule_struct
--Tmutex
--Tn_long
--Tother_child_rec
--Toverrides_t
--Tparent_score
--Tpid_t
--Tpiped_log
--Tpool
--Trequest_rec
--Trequire_line
--Trlim_t
--Tscoreboard
--Tsemaphore
--Tserver_addr_rec
--Tserver_rec
--Tserver_rec_chain
--Tshort_score
--Ttable
--Ttable_entry
--Tthread
--Tu_wide_int
--Tvtime_t
--Twide_int
diff --git a/rubbos/app/httpd-2.0.64/test/Makefile b/rubbos/app/httpd-2.0.64/test/Makefile
deleted file mode 100644
index 31afa4a2..00000000
--- a/rubbos/app/httpd-2.0.64/test/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-top_srcdir = /bottlenecks/rubbos/app/httpd-2.0.64
-top_builddir = /bottlenecks/rubbos/app/httpd-2.0.64
-srcdir = /bottlenecks/rubbos/app/httpd-2.0.64/test
-builddir = /bottlenecks/rubbos/app/httpd-2.0.64/test
-VPATH = /bottlenecks/rubbos/app/httpd-2.0.64/test
-
-# no targets: we don't want to build anything by default. if you want the
-# test programs, then "make test"
-TARGETS =
-
-PROGRAMS =
-
-PROGRAM_LDADD = $(EXTRA_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES = \
- $(top_srcdir)/srclib/apr-util/libaprutil.la \
- $(top_srcdir)/srclib/apr/libapr.la
-
-include $(top_builddir)/build/rules.mk
-
-test: $(PROGRAMS)
-
-# example for building a test proggie
-# dbu_OBJECTS = dbu.lo
-# dbu: $(dbu_OBJECTS)
-# $(LINK) $(dbu_OBJECTS) $(PROGRAM_LDADD)
diff --git a/rubbos/app/httpd-2.0.64/test/Makefile.in b/rubbos/app/httpd-2.0.64/test/Makefile.in
deleted file mode 100644
index 6d834054..00000000
--- a/rubbos/app/httpd-2.0.64/test/Makefile.in
+++ /dev/null
@@ -1,20 +0,0 @@
-
-# no targets: we don't want to build anything by default. if you want the
-# test programs, then "make test"
-TARGETS =
-
-PROGRAMS =
-
-PROGRAM_LDADD = $(EXTRA_LDFLAGS) $(PROGRAM_DEPENDENCIES) $(EXTRA_LIBS)
-PROGRAM_DEPENDENCIES = \
- $(top_srcdir)/srclib/apr-util/libaprutil.la \
- $(top_srcdir)/srclib/apr/libapr.la
-
-include $(top_builddir)/build/rules.mk
-
-test: $(PROGRAMS)
-
-# example for building a test proggie
-# dbu_OBJECTS = dbu.lo
-# dbu: $(dbu_OBJECTS)
-# $(LINK) $(dbu_OBJECTS) $(PROGRAM_LDADD)
diff --git a/rubbos/app/httpd-2.0.64/test/README b/rubbos/app/httpd-2.0.64/test/README
deleted file mode 100644
index 9f8be502..00000000
--- a/rubbos/app/httpd-2.0.64/test/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains useful test code for testing various bits
-of Apache functionality. This stuff is for the developers only,
-so we might remove it on public releases.
diff --git a/rubbos/app/httpd-2.0.64/test/check_chunked b/rubbos/app/httpd-2.0.64/test/check_chunked
deleted file mode 100644
index 50c56eb0..00000000
--- a/rubbos/app/httpd-2.0.64/test/check_chunked
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# This is meant to be used on the raw output of an HTTP/1.1 connection
-# to check that the chunks are all correctly laid out. It's easiest
-# to use a tool like netcat to generate the output. This script
-# *insists* that \r exist in the output.
-#
-# You can find netcat at avian.org:/src/hacks/nc110.tgz.
-
-use strict;
-
-my $is_chunked = 0;
-
-# must toss headers
-while(<>) {
- if (/^Transfer-Encoding:\s+chunked/i) {
- $is_chunked = 1;
- }
- last if ($_ eq "\r\n");
-}
-
-$is_chunked || die "wasn't chunked\n";
-
-for(;;) {
- $_ = <> || die "unexpected end of file!\n";
-
- m#^([0-9a-f]+) *\r$#i || die "bogus chunklen: $_";
-
- my $chunklen = hex($1);
-
- exit 0 if ($chunklen == 0);
-
- chop; chop;
- print "$_ ";
-
- my $data = '';
- read(ARGV, $data, $chunklen) == $chunklen || die "short read!\n";
-
- $_ = <> || die "unexpected end of file!\n";
-
- $_ eq "\r\n" || die "missing chunk trailer!\n";
-}
diff --git a/rubbos/app/httpd-2.0.64/test/cls.c b/rubbos/app/httpd-2.0.64/test/cls.c
deleted file mode 100644
index bb0a85d1..00000000
--- a/rubbos/app/httpd-2.0.64/test/cls.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctype.h>
-#include <dirent.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-/*
- * Compare a string to a mask
- * Mask characters:
- * @ - uppercase letter
- * # - lowercase letter
- * & - hex digit
- * # - digit
- * * - swallow remaining characters
- * <x> - exact match for any other character
- */
-static int checkmask(const char *data, const char *mask)
-{
- int i, ch, d;
-
- for (i = 0; mask[i] != '\0' && mask[i] != '*'; i++) {
- ch = mask[i];
- d = data[i];
- if (ch == '@') {
- if (!isupper(d))
- return 0;
- }
- else if (ch == '$') {
- if (!islower(d))
- return 0;
- }
- else if (ch == '#') {
- if (!isdigit(d))
- return 0;
- }
- else if (ch == '&') {
- if (!isxdigit(d))
- return 0;
- }
- else if (ch != d)
- return 0;
- }
-
- if (mask[i] == '*')
- return 1;
- else
- return (data[i] == '\0');
-}
-
-/*
- * Converts 8 hex digits to a time integer
- */
-static int hex2sec(const char *x)
-{
- int i, ch;
- unsigned int j;
-
- for (i = 0, j = 0; i < 8; i++) {
- ch = x[i];
- j <<= 4;
- if (isdigit(ch))
- j |= ch - '0';
- else if (isupper(ch))
- j |= ch - ('A' - 10);
- else
- j |= ch - ('a' - 10);
- }
- if (j == 0xffffffff)
- return -1; /* so that it works with 8-byte ints */
- else
- return j;
-}
-
-int main(int argc, char **argv)
-{
- int i, ver;
- DIR *d;
- struct dirent *e;
- const char *s;
- FILE *fp;
- char path[FILENAME_MAX + 1];
- char line[1035];
- time_t date, lmod, expire;
- unsigned int len;
- struct tm ts;
- char sdate[30], slmod[30], sexpire[30];
- const char time_format[] = "%e %b %Y %R";
-
- if (argc != 2) {
- printf("Usage: cls directory\n");
- exit(0);
- }
-
- d = opendir(argv[1]);
- if (d == NULL) {
- perror("opendir");
- exit(1);
- }
-
- for (;;) {
- e = readdir(d);
- if (e == NULL)
- break;
- s = e->d_name;
- if (s[0] == '.' || s[0] == '#')
- continue;
- sprintf(path, "%s/%s", argv[1], s);
- fp = fopen(path, "r");
- if (fp == NULL) {
- perror("fopen");
- continue;
- }
- if (fgets(line, 1034, fp) == NULL) {
- perror("fgets");
- fclose(fp);
- continue;
- }
- if (!checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&\n")) {
- fprintf(stderr, "Bad cache file\n");
- fclose(fp);
- continue;
- }
- date = hex2sec(line);
- lmod = hex2sec(line + 9);
- expire = hex2sec(line + 18);
- ver = hex2sec(line + 27);
- len = hex2sec(line + 35);
- if (fgets(line, 1034, fp) == NULL) {
- perror("fgets");
- fclose(fp);
- continue;
- }
- fclose(fp);
- i = strlen(line);
- if (strncmp(line, "X-URL: ", 7) != 0 || line[i - 1] != '\n') {
- fprintf(stderr, "Bad cache file\n");
- continue;
- }
- line[i - 1] = '\0';
- if (date != -1) {
- ts = *gmtime(&date);
- strftime(sdate, 30, time_format, &ts);
- }
- else
- strcpy(sdate, "-");
-
- if (lmod != -1) {
- ts = *gmtime(&lmod);
- strftime(slmod, 30, time_format, &ts);
- }
- else
- strcpy(slmod, "-");
-
- if (expire != -1) {
- ts = *gmtime(&expire);
- strftime(sexpire, 30, time_format, &ts);
- }
- else
- strcpy(sexpire, "-");
-
- printf("%s: %d; %s %s %s\n", line + 7, ver, sdate, slmod, sexpire);
- }
-
- closedir(d);
- return 0;
-}
diff --git a/rubbos/app/httpd-2.0.64/test/tcpdumpscii.txt b/rubbos/app/httpd-2.0.64/test/tcpdumpscii.txt
deleted file mode 100644
index 9c1060ed..00000000
--- a/rubbos/app/httpd-2.0.64/test/tcpdumpscii.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-
-From marcs@znep.com Fri Apr 17 15:16:16 1998
-Date: Sat, 22 Nov 1997 20:44:10 -0700 (MST)
-From: Marc Slemko <marcs@znep.com>
-To: TLOSAP <new-httpd@apache.org>
-Subject: Re: Getting ethernet packets content under FreeBSD? (fwd)
-Reply-To: new-httpd@apache.org
-
-Anyone too lazy to hack tcpdump (eg. my tcpdump has a -X option to display
-the data in ASCII) can use something like the below to grab HTTP headers
-when debugging broken clients.
-
-Nothing complicated, but handy.
-
----------- Forwarded message ----------
-Date: Sat, 22 Nov 1997 14:35:23 PST
-From: Bill Fenner <fenner@parc.xerox.com>
-To: Nate Williams <nate@mt.sri.com>
-Cc: bmah@ca.sandia.gov, hackers@FreeBSD.ORG
-Subject: Re: Getting ethernet packets content under FreeBSD?
-
-I usually just use this perl script, which I call "tcpdumpscii".
-Then run "tcpdumpscii -s 1500 -x [other tcpdump args]".
-
- Bill
-
-#!/import/misc/bin/perl
-#
-#
-open(TCPDUMP,"tcpdump -l @ARGV|");
-while (<TCPDUMP>) {
- if (/^\s+(\S\S)+/) {
- $sav = $_;
- $asc = "";
- while (s/\s*(\S\S)\s*//) {
- $i = hex($1);
- if ($i < 32 || $i > 126) {
- $asc .= ".";
- } else {
- $asc .= pack(C,hex($1));
- }
- }
- $foo = "." x length($asc);
- $_ = $sav;
- s/\t/ /g;
- s/^$foo/$asc/;
- }
- print;
-}
-
diff --git a/rubbos/app/httpd-2.0.64/test/test-writev.c b/rubbos/app/httpd-2.0.64/test/test-writev.c
deleted file mode 100644
index 9e7f04aa..00000000
--- a/rubbos/app/httpd-2.0.64/test/test-writev.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- test-writev: use this to figure out if your writev() does intelligent
- things on the network. Some writev()s when given multiple buffers
- will break them up into multiple packets, which is a waste.
-
- Linux prior to 2.0.31 has this problem.
-
- Solaris 2.5, 2.5.1 doesn't appear to, 2.6 hasn't been tested.
-
- IRIX 5.3 doesn't have this problem.
-
- To use this you want to snoop the wire with tcpdump, and then run
- "test-writev a.b.c.d port#" ... against some TCP service on another
- box. For example you can run it against port 80 on another server.
- You want to look to see how many data packets are sent, you're hoping
- only one of size 300 is sent.
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <sys/uio.h>
-#include <errno.h>
-
-#ifndef INADDR_NONE
-#define INADDR_NONE (-1ul)
-#endif
-
-void main( int argc, char **argv )
-{
- struct sockaddr_in server_addr;
- int s;
- struct iovec vector[3];
- char buf[100];
- int i;
- const int just_say_no = 1;
-
- if( argc != 3 ) {
-usage:
- fprintf( stderr, "usage: test-writev a.b.c.d port#\n" );
- exit( 1 );
- }
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.s_addr = inet_addr( argv[1] );
- if( server_addr.sin_addr.s_addr == INADDR_NONE ) {
- fprintf( stderr, "bogus address\n" );
- goto usage;
- }
- server_addr.sin_port = htons( atoi( argv[2] ) );
-
- s = socket( AF_INET, SOCK_STREAM, 0 );
- if( s < 0 ) {
- perror("socket");
- exit(1);
- }
- if( connect( s, (struct sockaddr *)&server_addr, sizeof( server_addr ) )
- != 0 ) {
- perror("connect");
- exit(1);
- }
-
- if( setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char*)&just_say_no,
- sizeof(just_say_no)) != 0 ) {
- perror( "TCP_NODELAY" );
- exit(1);
- }
- /* now build up a two part writev and write it out */
- for( i = 0; i < sizeof( buf ); ++i ) {
- buf[i] = 'x';
- }
- vector[0].iov_base = buf;
- vector[0].iov_len = sizeof(buf);
- vector[1].iov_base = buf;
- vector[1].iov_len = sizeof(buf);
- vector[2].iov_base = buf;
- vector[2].iov_len = sizeof(buf);
-
- i = writev( s, &vector[0], 3 );
- fprintf( stdout, "i=%d, errno=%d\n", i, errno );
- exit(0);
-}
diff --git a/rubbos/app/httpd-2.0.64/test/test_find.c b/rubbos/app/httpd-2.0.64/test/test_find.c
deleted file mode 100644
index 0f401ffd..00000000
--- a/rubbos/app/httpd-2.0.64/test/test_find.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This program tests the ap_find_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
- gcc -g -O2 -I../os/unix -I../include -o test_find \
- -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
- ../main/alloc.o ../main/buff.o ../main/util.o \
- ../ap/libap.a -lsocket -lnsl test_find.c
- *
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- const request_rec *r, const char *fmt, ...)
-{
- ;
-}
-
-int main (void)
-{
- apr_pool_t *p;
- char line[512];
- char tok[512];
-
- p = apr_pool_alloc_init();
-
- printf("Enter field value to find items within:\n");
- if (!gets(line))
- exit(0);
-
- printf("Enter search item:\n");
- while (gets(tok)) {
- printf(" [%s] == %s\n", tok, ap_find_list_item(p, line, tok)
- ? "Yes" : "No");
- printf("Enter search item:\n");
- }
-
- exit(0);
-}
diff --git a/rubbos/app/httpd-2.0.64/test/test_limits.c b/rubbos/app/httpd-2.0.64/test/test_limits.c
deleted file mode 100644
index 8dca825b..00000000
--- a/rubbos/app/httpd-2.0.64/test/test_limits.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/**************************************************************
- * test_limits.c
- *
- * A simple program for sending abusive requests to a server, based
- * on the sioux.c exploit code that this nimrod posted (see below).
- * Roy added options for testing long header fieldsize (-t h), long
- * request-lines (-t r), and a long request body (-t b).
- *
- * FreeBSD 2.2.x, FreeBSD 3.0, IRIX 5.3, IRIX 6.2:
- * gcc -o test_limits test_limits.c
- *
- * Solaris 2.5.1:
- * gcc -o test_limits test_limits.c -lsocket -lnsl
- *
- *
- * Message-ID: <861zqspvtw.fsf@niobe.ewox.org>
- * Date: Fri, 7 Aug 1998 19:04:27 +0200
- * Sender: Bugtraq List <BUGTRAQ@netspace.org>
- * From: Dag-Erling Coidan =?ISO-8859-1?Q?Sm=F8rgrav?= <finrod@EWOX.ORG>
- * Subject: YA Apache DoS attack
- *
- * Copyright (c) 1998 Dag-Erling Codan Smrgrav
- * 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
- * in this position and unchanged.
- * 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 name of the author may not be used to endorse or promote products
- * derived from this software withough specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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.
- *
- */
-
-/*
- * Kudos to Mark Huizer who originally suggested this on freebsd-current
- */
-
-#include <sys/types.h>
-#include <sys/uio.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TEST_LONG_REQUEST_LINE 1
-#define TEST_LONG_REQUEST_FIELDS 2
-#define TEST_LONG_REQUEST_FIELDSIZE 3
-#define TEST_LONG_REQUEST_BODY 4
-
-void
-usage(void)
-{
- fprintf(stderr,
- "usage: test_limits [-t (r|n|h|b)] [-a address] [-p port] [-n num]\n");
- exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
- struct sockaddr_in sin;
- struct hostent *he;
- FILE *f;
- int o, sd;
-
- /* default parameters */
- char *addr = "localhost";
- int port = 80;
- int num = 1000;
- int testtype = TEST_LONG_REQUEST_FIELDS;
-
- /* get options */
- while ((o = getopt(argc, argv, "t:a:p:n:")) != EOF)
- switch (o) {
- case 't':
- if (*optarg == 'r')
- testtype = TEST_LONG_REQUEST_LINE;
- else if (*optarg == 'n')
- testtype = TEST_LONG_REQUEST_FIELDS;
- else if (*optarg == 'h')
- testtype = TEST_LONG_REQUEST_FIELDSIZE;
- else if (*optarg == 'b')
- testtype = TEST_LONG_REQUEST_BODY;
- break;
- case 'a':
- addr = optarg;
- break;
- case 'p':
- port = atoi(optarg);
- break;
- case 'n':
- num = atoi(optarg);
- break;
- default:
- usage();
- }
-
- if (argc != optind)
- usage();
-
- /* connect */
- if ((he = gethostbyname(addr)) == NULL) {
- perror("gethostbyname");
- exit(1);
- }
- bzero(&sin, sizeof(sin));
- bcopy(he->h_addr, (char *)&sin.sin_addr, he->h_length);
- sin.sin_family = he->h_addrtype;
- sin.sin_port = htons(port);
-
- if ((sd = socket(sin.sin_family, SOCK_STREAM, IPPROTO_TCP)) == -1) {
- perror("socket");
- exit(1);
- }
-
- if (connect(sd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
- perror("connect");
- exit(1);
- }
-
- if ((f = fdopen(sd, "r+")) == NULL) {
- perror("fdopen");
- exit(1);
- }
-
- /* attack! */
- fprintf(stderr, "Testing like a plague of locusts on %s\n", addr);
-
- if (testtype == TEST_LONG_REQUEST_LINE) {
- fprintf(f, "GET ");
- while (num-- && !ferror(f)) {
- fprintf(f, "/123456789");
- fflush(f);
- }
- fprintf(f, " HTTP/1.0\r\n\r\n");
- }
- else {
- fprintf(f, "GET /fred/foo HTTP/1.0\r\n");
-
- if (testtype == TEST_LONG_REQUEST_FIELDSIZE) {
- while (num-- && !ferror(f)) {
- fprintf(f, "User-Agent: sioux");
- fflush(f);
- }
- fprintf(f, "\r\n");
- }
- else if (testtype == TEST_LONG_REQUEST_FIELDS) {
- while (num-- && !ferror(f))
- fprintf(f, "User-Agent: sioux\r\n");
- fprintf(f, "\r\n");
- }
- else if (testtype == TEST_LONG_REQUEST_BODY) {
- fprintf(f, "User-Agent: sioux\r\n");
- fprintf(f, "Content-Length: 33554433\r\n");
- fprintf(f, "\r\n");
- while (num-- && !ferror(f))
- fprintf(f, "User-Agent: sioux\r\n");
- }
- else {
- fprintf(f, "\r\n");
- }
- }
- fflush(f);
-
- {
- apr_ssize_t len;
- char buff[512];
-
- while ((len = read(sd, buff, 512)) > 0)
- len = write(1, buff, len);
- }
- if (ferror(f)) {
- perror("fprintf");
- exit(1);
- }
-
- fclose(f);
- exit(0);
-}
diff --git a/rubbos/app/httpd-2.0.64/test/test_parser.c b/rubbos/app/httpd-2.0.64/test/test_parser.c
deleted file mode 100644
index fc17a725..00000000
--- a/rubbos/app/httpd-2.0.64/test/test_parser.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This program tests the ap_get_list_item routine in ../main/util.c.
- *
- * The defines in this sample compile line are specific to Roy's system.
- * They should match whatever was used to compile Apache first.
- *
- gcc -g -O2 -I../os/unix -I../include -o test_parser \
- -DSOLARIS2=250 -Wall -DALLOC_DEBUG -DPOOL_DEBUG \
- ../main/alloc.o ../main/buff.o ../main/util.o \
- ../ap/libap.a -lsocket -lnsl test_parser.c
- *
- * Roy Fielding, 1999
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "httpd.h"
-#include "apr_general.h"
-
-/*
- * Dummy a bunch of stuff just to get a compile
- */
-uid_t ap_user_id;
-gid_t ap_group_id;
-void *ap_dummy_mutex = &ap_dummy_mutex;
-char *ap_server_argv0;
-
-AP_DECLARE(void) ap_block_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_unblock_alarms(void)
-{
- ;
-}
-
-AP_DECLARE(void) ap_log_error(const char *file, int line, int level,
- const request_rec *r, const char *fmt, ...)
-{
- ;
-}
-
-int main (void)
-{
- apr_pool_t *p;
- const char *field;
- char *newstr;
- char instr[512];
-
- p = apr_pool_alloc_init();
-
- while (gets(instr)) {
- printf(" [%s] ==\n", instr);
- field = instr;
- while ((newstr = ap_get_list_item(p, &field)) != NULL)
- printf(" <%s> ..\n", newstr);
- }
-
- exit(0);
-}
diff --git a/rubbos/app/httpd-2.0.64/test/test_select.c b/rubbos/app/httpd-2.0.64/test/test_select.c
deleted file mode 100644
index af110356..00000000
--- a/rubbos/app/httpd-2.0.64/test/test_select.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* This is just a quick test program to see how long a wait is
- * produced by a select loop with an exponential backoff.
- *
- * gcc -g -O2 -o test_select test_select.c
- * test_select
- *
- * Roy Fielding, 1996
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-int main (void)
-{
- int srv;
- long waittime = 4096;
- struct timeval tv;
-
- printf("Start\n");
- while ((waittime > 0) && (waittime < 3000000)) {
- printf("%d\n", waittime);
- tv.tv_sec = waittime/1000000;
- tv.tv_usec = waittime%1000000;
- waittime <<= 1;
- srv = select(0, NULL, NULL, NULL, &tv);
- }
- printf("End\n");
- exit(0);
-}
diff --git a/rubbos/app/httpd-2.0.64/test/time-sem.c b/rubbos/app/httpd-2.0.64/test/time-sem.c
deleted file mode 100644
index bdf09316..00000000
--- a/rubbos/app/httpd-2.0.64/test/time-sem.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
-time-sem.c has the basics of the semaphores we use in http_main.c. It's
-intended for timing differences between various methods on an
-architecture. In practice we've found many things affect which semaphore
-to be used:
-
- - NFS filesystems absolutely suck for fcntl() and flock()
-
- - uslock absolutely sucks on single-processor IRIX boxes, but
- absolutely rocks on multi-processor boxes. The converse
- is true for fcntl. sysvsem seems a moderate balance.
-
- - Under Solaris you can't have too many processes use SEM_UNDO, there
- might be a tuneable somewhere that increases the limit from 29.
- We're not sure what the tunable is, so there's a define
- NO_SEM_UNDO which can be used to simulate us trapping/blocking
- signals to be able to properly release the semaphore on a clean
- child death. You'll also need to define NEED_UNION_SEMUN
- under solaris.
-
-You'll need to define USE_SHMGET_SCOREBOARD if anonymous shared mmap()
-doesn't work on your system (i.e. linux).
-
-argv[1] is the #children, argv[2] is the #iterations per child
-
-You should run each over many different #children inputs, and choose
-#iter such that the program runs for at least a second or so... or even
-longer depending on your patience.
-
-compile with:
-
-gcc -o time-FCNTL -Wall -O time-sem.c -DUSE_FCNTL_SERIALIZED_ACCEPT
-gcc -o time-FLOCK -Wall -O time-sem.c -DUSE_FLOCK_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT
-gcc -o time-SYSVSEM2 -Wall -O time-sem.c -DUSE_SYSVSEM_SERIALIZED_ACCEPT -DNO_SEM_UNDO
-gcc -o time-PTHREAD -Wall -O time-sem.c -DUSE_PTHREAD_SERIALIZED_ACCEPT -lpthread
-gcc -o time-USLOCK -Wall -O time-sem.c -DUSE_USLOCK_SERIALIZED_ACCEPT
-
-not all versions work on all systems.
-*/
-
-#include <errno.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <sys/mman.h>
-#include <signal.h>
-
-#if defined(USE_FCNTL_SERIALIZED_ACCEPT)
-
-static struct flock lock_it;
-static struct flock unlock_it;
-
-static int fcntl_fd=-1;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void
-accept_mutex_init(void)
-{
-
- lock_it.l_whence = SEEK_SET; /* from current point */
- lock_it.l_start = 0; /* -"- */
- lock_it.l_len = 0; /* until end of file */
- lock_it.l_type = F_WRLCK; /* set exclusive/write lock */
- lock_it.l_pid = 0; /* pid not actually interesting */
- unlock_it.l_whence = SEEK_SET; /* from current point */
- unlock_it.l_start = 0; /* -"- */
- unlock_it.l_len = 0; /* until end of file */
- unlock_it.l_type = F_UNLCK; /* set exclusive/write lock */
- unlock_it.l_pid = 0; /* pid not actually interesting */
-
- printf("opening test-lock-thing in current directory\n");
- fcntl_fd = open("test-lock-thing", O_CREAT | O_WRONLY | O_EXCL, 0644);
- if (fcntl_fd == -1)
- {
- perror ("open");
- fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
- exit (1);
- }
- unlink("test-lock-thing");
-}
-
-void accept_mutex_on(void)
-{
- int ret;
-
- while ((ret = fcntl(fcntl_fd, F_SETLKW, &lock_it)) < 0 && errno == EINTR)
- continue;
-
- if (ret < 0) {
- perror ("fcntl lock_it");
- exit(1);
- }
-}
-
-void accept_mutex_off(void)
-{
- if (fcntl (fcntl_fd, F_SETLKW, &unlock_it) < 0)
- {
- perror ("fcntl unlock_it");
- exit(1);
- }
-}
-
-#elif defined(USE_FLOCK_SERIALIZED_ACCEPT)
-
-#include <sys/file.h>
-
-static int flock_fd=-1;
-
-#define FNAME "test-lock-thing"
-
-/*
- * Initialize mutex lock.
- * Must be safe to call this on a restart.
- */
-void accept_mutex_init(void)
-{
-
- printf("opening " FNAME " in current directory\n");
- flock_fd = open(FNAME, O_CREAT | O_WRONLY | O_EXCL, 0644);
- if (flock_fd == -1)
- {
- perror ("open");
- fprintf (stderr, "Cannot open lock file: %s\n", "test-lock-thing");
- exit (1);
- }
-}
-
-void accept_mutex_child_init(void)
-{
- flock_fd = open(FNAME, O_WRONLY, 0600);
- if (flock_fd == -1) {
- perror("open");
- exit(1);
- }
-}
-
-void accept_mutex_cleanup(void)
-{
- unlink(FNAME);
-}
-
-void accept_mutex_on(void)
-{
- int ret;
-
- while ((ret = flock(flock_fd, LOCK_EX)) < 0 && errno == EINTR)
- continue;
-
- if (ret < 0) {
- perror ("flock(LOCK_EX)");
- exit(1);
- }
-}
-
-void accept_mutex_off(void)
-{
- if (flock (flock_fd, LOCK_UN) < 0)
- {
- perror ("flock(LOCK_UN)");
- exit(1);
- }
-}
-
-#elif defined (USE_SYSVSEM_SERIALIZED_ACCEPT)
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/sem.h>
-
-static int sem_id = -1;
-#ifdef NO_SEM_UNDO
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-#endif
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
-#ifdef NEED_UNION_SEMUN
- /* believe it or not, you need to define this under solaris */
- union semun {
- int val;
- struct semid_ds *buf;
- ushort *array;
- };
-#endif
-
- union semun ick;
-
- sem_id = semget(999, 1, IPC_CREAT | 0666);
- if (sem_id < 0) {
- perror ("semget");
- exit (1);
- }
- ick.val = 1;
- if (semctl(sem_id, 0, SETVAL, ick) < 0) {
- perror ("semctl");
- exit(1);
- }
-#ifdef NO_SEM_UNDO
- sigfillset(&accept_block_mask);
- sigdelset(&accept_block_mask, SIGHUP);
- sigdelset(&accept_block_mask, SIGTERM);
- sigdelset(&accept_block_mask, SIGUSR1);
-#endif
-}
-
-void accept_mutex_on()
-{
- struct sembuf op;
-
-#ifdef NO_SEM_UNDO
- if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
- perror("sigprocmask(SIG_BLOCK)");
- exit (1);
- }
- op.sem_flg = 0;
-#else
- op.sem_flg = SEM_UNDO;
-#endif
- op.sem_num = 0;
- op.sem_op = -1;
- if (semop(sem_id, &op, 1) < 0) {
- perror ("accept_mutex_on");
- exit (1);
- }
-}
-
-void accept_mutex_off()
-{
- struct sembuf op;
-
- op.sem_num = 0;
- op.sem_op = 1;
-#ifdef NO_SEM_UNDO
- op.sem_flg = 0;
-#else
- op.sem_flg = SEM_UNDO;
-#endif
- if (semop(sem_id, &op, 1) < 0) {
- perror ("accept_mutex_off");
- exit (1);
- }
-#ifdef NO_SEM_UNDO
- if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
- perror("sigprocmask(SIG_SETMASK)");
- exit (1);
- }
-#endif
-}
-
-#elif defined (USE_PTHREAD_SERIALIZED_ACCEPT)
-
-/* note: pthread mutexes aren't released on child death, hence the
- * signal goop ... in a real implementation we'd do special things
- * during hup, term, usr1.
- */
-
-#include <pthread.h>
-
-static pthread_mutex_t *mutex;
-static sigset_t accept_block_mask;
-static sigset_t accept_previous_mask;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
- pthread_mutexattr_t mattr;
- int fd;
-
- fd = open ("/dev/zero", O_RDWR);
- if (fd == -1) {
- perror ("open(/dev/zero)");
- exit (1);
- }
- mutex = (pthread_mutex_t *)mmap ((caddr_t)0, sizeof (*mutex),
- PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (mutex == (void *)(caddr_t)-1) {
- perror ("mmap");
- exit (1);
- }
- close (fd);
- if (pthread_mutexattr_init(&mattr)) {
- perror ("pthread_mutexattr_init");
- exit (1);
- }
- if (pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED)) {
- perror ("pthread_mutexattr_setpshared");
- exit (1);
- }
- if (pthread_mutex_init(mutex, &mattr)) {
- perror ("pthread_mutex_init");
- exit (1);
- }
- sigfillset(&accept_block_mask);
- sigdelset(&accept_block_mask, SIGHUP);
- sigdelset(&accept_block_mask, SIGTERM);
- sigdelset(&accept_block_mask, SIGUSR1);
-}
-
-void accept_mutex_on()
-{
- if (sigprocmask(SIG_BLOCK, &accept_block_mask, &accept_previous_mask)) {
- perror("sigprocmask(SIG_BLOCK)");
- exit (1);
- }
- if (pthread_mutex_lock (mutex)) {
- perror ("pthread_mutex_lock");
- exit (1);
- }
-}
-
-void accept_mutex_off()
-{
- if (pthread_mutex_unlock (mutex)) {
- perror ("pthread_mutex_unlock");
- exit (1);
- }
- if (sigprocmask(SIG_SETMASK, &accept_previous_mask, NULL)) {
- perror("sigprocmask(SIG_SETMASK)");
- exit (1);
- }
-}
-
-#elif defined (USE_USLOCK_SERIALIZED_ACCEPT)
-
-#include <ulocks.h>
-
-static usptr_t *us = NULL;
-static ulock_t uslock = NULL;
-
-#define accept_mutex_child_init()
-#define accept_mutex_cleanup()
-
-void accept_mutex_init(void)
-{
- ptrdiff_t old;
- /* default is 8 */
-#define CONF_INITUSERS_MAX 15
- if ((old = usconfig(CONF_INITUSERS, CONF_INITUSERS_MAX)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((old = usconfig(CONF_LOCKTYPE, US_NODEBUG)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((old = usconfig(CONF_ARENATYPE, US_SHAREDONLY)) == -1) {
- perror("usconfig");
- exit(-1);
- }
- if ((us = usinit("/dev/zero")) == NULL) {
- perror("usinit");
- exit(-1);
- }
- if ((uslock = usnewlock(us)) == NULL) {
- perror("usnewlock");
- exit(-1);
- }
-}
-void accept_mutex_on()
-{
- switch(ussetlock(uslock)) {
- case 1:
- /* got lock */
- break;
- case 0:
- fprintf(stderr, "didn't get lock\n");
- exit(-1);
- case -1:
- perror("ussetlock");
- exit(-1);
- }
-}
-void accept_mutex_off()
-{
- if (usunsetlock(uslock) == -1) {
- perror("usunsetlock");
- exit(-1);
- }
-}
-#endif
-
-
-#ifndef USE_SHMGET_SCOREBOARD
-static void *get_shared_mem(apr_size_t size)
-{
- void *result;
-
- /* allocate shared memory for the shared_counter */
- result = (unsigned long *)mmap ((caddr_t)0, size,
- PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
- if (result == (void *)(caddr_t)-1) {
- perror ("mmap");
- exit (1);
- }
- return result;
-}
-#else
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-
-static void *get_shared_mem(apr_size_t size)
-{
- key_t shmkey = IPC_PRIVATE;
- int shmid = -1;
- void *result;
-#ifdef MOVEBREAK
- char *obrk;
-#endif
-
- if ((shmid = shmget(shmkey, size, IPC_CREAT | SHM_R | SHM_W)) == -1) {
- perror("shmget");
- exit(1);
- }
-
-#ifdef MOVEBREAK
- /*
- * Some SysV systems place the shared segment WAY too close
- * to the dynamic memory break point (sbrk(0)). This severely
- * limits the use of malloc/sbrk in the program since sbrk will
- * refuse to move past that point.
- *
- * To get around this, we move the break point "way up there",
- * attach the segment and then move break back down. Ugly
- */
- if ((obrk = sbrk(MOVEBREAK)) == (char *) -1) {
- perror("sbrk");
- }
-#endif
-
-#define BADSHMAT ((void *)(-1))
- if ((result = shmat(shmid, 0, 0)) == BADSHMAT) {
- perror("shmat");
- }
- /*
- * We must avoid leaving segments in the kernel's
- * (small) tables.
- */
- if (shmctl(shmid, IPC_RMID, NULL) != 0) {
- perror("shmctl(IPC_RMID)");
- }
- if (result == BADSHMAT) /* now bailout */
- exit(1);
-
-#ifdef MOVEBREAK
- if (obrk == (char *) -1)
- return; /* nothing else to do */
- if (sbrk(-(MOVEBREAK)) == (char *) -1) {
- perror("sbrk 2");
- }
-#endif
- return result;
-}
-#endif
-
-#ifdef _POSIX_PRIORITY_SCHEDULING
-/* don't ask */
-#define _P __P
-#include <sched.h>
-#define YIELD sched_yield()
-#else
-#define YIELD do { struct timeval zero; zero.tv_sec = zero.tv_usec = 0; select(0,0,0,0,&zero); } while(0)
-#endif
-
-void main (int argc, char **argv)
-{
- int num_iter;
- int num_child;
- int i;
- struct timeval first;
- struct timeval last;
- long ms;
- int pid;
- unsigned long *shared_counter;
-
- if (argc != 3) {
- fprintf (stderr, "Usage: time-sem num-child num iter\n");
- exit (1);
- }
-
- num_child = atoi (argv[1]);
- num_iter = atoi (argv[2]);
-
- /* allocate shared memory for the shared_counter */
- shared_counter = get_shared_mem(sizeof(*shared_counter));
-
- /* initialize counter to 0 */
- *shared_counter = 0;
-
- accept_mutex_init ();
-
- /* parent grabs mutex until done spawning children */
- accept_mutex_on ();
-
- for (i = 0; i < num_child; ++i) {
- pid = fork();
- if (pid == 0) {
- /* child, do our thing */
- accept_mutex_child_init();
- for (i = 0; i < num_iter; ++i) {
- unsigned long tmp;
-
- accept_mutex_on ();
- tmp = *shared_counter;
- YIELD;
- *shared_counter = tmp + 1;
- accept_mutex_off ();
- }
- exit (0);
- } else if (pid == -1) {
- perror ("fork");
- exit (1);
- }
- }
-
- /* a quick test to see that nothing is screwed up */
- if (*shared_counter != 0) {
- puts ("WTF! shared_counter != 0 before the children have been started!");
- exit (1);
- }
-
- gettimeofday (&first, NULL);
- /* launch children into action */
- accept_mutex_off ();
- for (i = 0; i < num_child; ++i) {
- if (wait(NULL) == -1) {
- perror ("wait");
- }
- }
- gettimeofday (&last, NULL);
-
- if (*shared_counter != num_child * num_iter) {
- printf ("WTF! shared_counter != num_child * num_iter!\n"
- "shared_counter = %lu\nnum_child = %d\nnum_iter=%d\n",
- *shared_counter,
- num_child, num_iter);
- }
-
- last.tv_sec -= first.tv_sec;
- ms = last.tv_usec - first.tv_usec;
- if (ms < 0) {
- --last.tv_sec;
- ms += 1000000;
- }
- last.tv_usec = ms;
- printf ("%8lu.%06lu\n", last.tv_sec, last.tv_usec);
-
- accept_mutex_cleanup();
-
- exit(0);
-}
-
diff --git a/rubbos/app/httpd-2.0.64/test/zb.c b/rubbos/app/httpd-2.0.64/test/zb.c
deleted file mode 100644
index 0a6666eb..00000000
--- a/rubbos/app/httpd-2.0.64/test/zb.c
+++ /dev/null
@@ -1,567 +0,0 @@
-
-/* ZeusBench V1.01
- ===============
-
-This program is Copyright (C) Zeus Technology Limited 1996.
-
-This program may be used and copied freely providing this copyright notice
-is not removed.
-
-This software is provided "as is" and any express or implied waranties,
-including but not limited to, the implied warranties of merchantability and
-fitness for a particular purpose are disclaimed. In no event shall
-Zeus Technology Ltd. be liable for any direct, indirect, incidental, special,
-exemplary, or consequential damaged (including, but not limited to,
-procurement of substitute good or services; loss of use, data, or profits;
-or business interruption) however caused and on 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.
-
- Written by Adam Twiss (adam@zeus.co.uk). March 1996
-
-Thanks to the following people for their input:
- Mike Belshe (mbelshe@netscape.com)
- Michael Campanella (campanella@stevms.enet.dec.com)
-
-*/
-
-/* -------------------- Notes on compiling ------------------------------
-
-This should compile unmodified using gcc on HP-UX, FreeBSD, Linux,
-IRIX, Solaris, AIX and Digital Unix (OSF). On Solaris 2.x you will
-need to compile with "-lnsl -lsocket" options. If you have any
-difficulties compiling then let me know.
-
-On SunOS 4.x.x you may need to compile with -DSUNOS4 to add the following
-two lines of code which appear not to exist in my SunOS headers */
-
-#ifdef SUNOS4
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-
-/* -------------------------------------------------------------------- */
-
-/* affects include files on Solaris */
-#define BSD_COMP
-
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <errno.h>
-#include <sys/ioctl.h>
-#include <string.h>
-
-/* ------------------- DEFINITIONS -------------------------- */
-
-/* maximum number of requests on a time limited test */
-#define MAX_REQUESTS 50000
-
-/* good old state machine */
-#define STATE_UNCONNECTED 0
-#define STATE_CONNECTING 1
-#define STATE_READ 2
-
-#define CBUFFSIZE 512
-
-struct connection
-{
- int fd;
- int state;
- int read; /* amount of bytes read */
- int bread; /* amount of body read */
- int length; /* Content-Length value used for keep-alive */
- char cbuff[CBUFFSIZE]; /* a buffer to store server response header */
- int cbx; /* offset in cbuffer */
- int keepalive; /* non-zero if a keep-alive request */
- int gotheader; /* non-zero if we have the entire header in cbuff */
- struct timeval start, connect, done;
-};
-
-struct data
-{
- int read; /* number of bytes read */
- int ctime; /* time in ms to connect */
- int time; /* time in ms for connection */
-};
-
-#define min(a,b) ((a)<(b))?(a):(b)
-#define max(a,b) ((a)>(b))?(a):(b)
-
-/* --------------------- GLOBALS ---------------------------- */
-
-int requests = 1; /* Number of requests to make */
-int concurrency = 1; /* Number of multiple requests to make */
-int tlimit = 0; /* time limit in cs */
-int keepalive = 0; /* try and do keepalive connections */
-char *machine; /* Machine name */
-char *file; /* file name to use */
-char server_name[80]; /* name that server reports */
-int port = 80; /* port to use */
-
-int doclen = 0; /* the length the document should be */
-int totalread = 0; /* total number of bytes read */
-int totalbread = 0; /* totoal amount of entity body read */
-int done=0; /* number of requests we have done */
-int doneka=0; /* number of keep alive connections done */
-int good=0, bad=0; /* number of good and bad requests */
-
-/* store error cases */
-int err_length = 0, err_conn = 0, err_except = 0;
-
-struct timeval start, endtime;
-
-/* global request (and its length) */
-char request[512];
-int reqlen;
-
-/* one global throw-away buffer to read stuff into */
-char buffer[4096];
-
-struct connection *con; /* connection array */
-struct data *stats; /* date for each request */
-
-fd_set readbits, writebits; /* bits for select */
-struct sockaddr_in server; /* server addr structure */
-
-/* --------------------------------------------------------- */
-
-/* simple little function to perror and exit */
-
-static void err(char *s)
-{
- perror(s);
- exit(errno);
-}
-
-/* --------------------------------------------------------- */
-
-/* write out request to a connection - assumes we can write
- (small) request out in one go into our new socket buffer */
-
-void write_request(struct connection *c)
-{
- gettimeofday(&c->connect,0);
- write(c->fd,request, reqlen);
- c->state = STATE_READ;
- FD_SET(c->fd, &readbits);
- FD_CLR(c->fd, &writebits);
-}
-
-/* --------------------------------------------------------- */
-
-/* make an fd non blocking */
-
-void nonblock(int fd)
-{
- int i=1;
- ioctl(fd, FIONBIO, &i);
-}
-
-/* --------------------------------------------------------- */
-
-/* returns the time in ms between two timevals */
-
-int timedif(struct timeval a, struct timeval b)
-{
- register int us,s;
-
- us = a.tv_usec - b.tv_usec;
- us /= 1000;
- s = a.tv_sec - b.tv_sec;
- s *= 1000;
- return s+us;
-}
-
-/* --------------------------------------------------------- */
-
-/* calculate and output results and exit */
-
-void output_results()
-{
- int timetaken;
-
- gettimeofday(&endtime,0);
- timetaken = timedif(endtime, start);
-
- printf("\n---\n");
- printf("Server: %s\n", server_name);
- printf("Document Length: %d\n", doclen);
- printf("Concurency Level: %d\n", concurrency);
- printf("Time taken for tests: %d.%03d seconds\n",
- timetaken/1000, timetaken%1000);
- printf("Complete requests: %d\n", done);
- printf("Failed requests: %d\n", bad);
- if(bad) printf(" (Connect: %d, Length: %d, Exceptions: %d)\n",
- err_conn, err_length, err_except);
- if(keepalive) printf("Keep-Alive requests: %d\n", doneka);
- printf("Bytes transfered: %d\n", totalread);
- printf("HTML transfered: %d\n", totalbread);
-
- /* avoid divide by zero */
- if(timetaken) {
- printf("Requests per seconds: %.2f\n", 1000*(float)(done)/timetaken);
- printf("Transfer rate: %.2f kb/s\n",
- (float)(totalread)/timetaken);
- }
-
- {
- /* work out connection times */
- int i;
- int totalcon=0, total=0;
- int mincon=9999999, mintot=999999;
- int maxcon=0, maxtot=0;
-
- for(i=0; i<requests; i++) {
- struct data s = stats[i];
- mincon = min(mincon, s.ctime);
- mintot = min(mintot, s.time);
- maxcon = max(maxcon, s.ctime);
- maxtot = max(maxtot, s.time);
- totalcon += s.ctime;
- total += s.time;
- }
- printf("\nConnnection Times (ms)\n");
- printf(" min avg max\n");
- printf("Connect: %5d %5d %5d\n",mincon, totalcon/requests, maxcon );
- printf("Total: %5d %5d %5d\n", mintot, total/requests, maxtot);
- printf("---\n\n");
- }
-
- exit(0);
-}
-
-/* --------------------------------------------------------- */
-
-/* start asnchronous non-blocking connection */
-
-void start_connect(struct connection *c)
-{
- c->read = 0;
- c->bread = 0;
- c->keepalive = 0;
- c->cbx = 0;
- c->gotheader = 0;
-
- c->fd = socket(AF_INET, SOCK_STREAM, 0);
- if(c->fd<0) err("socket");
-
- nonblock(c->fd);
- gettimeofday(&c->start,0);
-
- if(connect(c->fd, (struct sockaddr *) &server, sizeof(server))<0) {
- if(errno==EINPROGRESS) {
- c->state = STATE_CONNECTING;
- FD_SET(c->fd, &writebits);
- return;
- }
- else {
- close(c->fd);
- err_conn++;
- if(bad++>10) {
- printf("\nTest aborted after 10 failures\n\n");
- exit(1);
- }
- start_connect(c);
- }
- }
-
- /* connected first time */
- write_request(c);
-}
-
-/* --------------------------------------------------------- */
-
-/* close down connection and save stats */
-
-void close_connection(struct connection *c)
-{
- if(c->read == 0 && c->keepalive) {
- /* server has legitiamately shut down an idle keep alive request */
- good--; /* connection never happend */
- }
- else {
- if(good==1) {
- /* first time here */
- doclen = c->bread;
- } else if (c->bread!=doclen) {
- bad++;
- err_length++;
- }
-
- /* save out time */
- if(done < requests) {
- struct data s;
- gettimeofday(&c->done,0);
- s.read = c->read;
- s.ctime = timedif(c->connect, c->start);
- s.time = timedif(c->done, c->start);
- stats[done++] = s;
- }
- }
-
- close(c->fd);
- FD_CLR(c->fd, &readbits);
- FD_CLR(c->fd, &writebits);
-
- /* connect again */
- start_connect(c);
- return;
-}
-
-/* --------------------------------------------------------- */
-
-/* read data from connection */
-
-void read_connection(struct connection *c)
-{
- int r;
-
- r=read(c->fd,buffer,sizeof(buffer));
- if(r==0 || (r<0 && errno!=EAGAIN)) {
- good++;
- close_connection(c);
- return;
- }
-
- if(r<0 && errno==EAGAIN) return;
-
- c->read += r;
- totalread += r;
-
- if(!c->gotheader) {
- char *s;
- int l=4;
- int space = CBUFFSIZE - c->cbx - 1; /* -1 to allow for 0 terminator */
- int tocopy = (space<r)?space:r;
- memcpy(c->cbuff+c->cbx, buffer, space);
- c->cbx += tocopy; space -= tocopy;
- c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */
- s = strstr(c->cbuff, "\r\n\r\n");
- /* this next line is so that we talk to NCSA 1.5 which blatantly breaks
- the http specifaction */
- if(!s) { s = strstr(c->cbuff,"\n\n"); l=2; }
-
- if(!s) {
- /* read rest next time */
- if(space)
- return;
- else {
- /* header is in invalid or too big - close connection */
- close(c->fd);
- if(bad++>10) {
- printf("\nTest aborted after 10 failures\n\n");
- exit(1);
- }
- FD_CLR(c->fd, &writebits);
- start_connect(c);
- }
- }
- else {
- /* have full header */
- if(!good) {
- /* this is first time, extract some interesting info */
- char *p, *q;
- p = strstr(c->cbuff, "Server:");
- q = server_name;
- if(p) { p+=8; while(*p>32) *q++ = *p++; }
- *q = 0;
- }
-
- c->gotheader = 1;
- *s = 0; /* terminate at end of header */
- if(keepalive &&
- (strstr(c->cbuff, "Keep-Alive")
- || strstr(c->cbuff, "keep-alive"))) /* for benefit of MSIIS */
- {
- char *cl;
- cl = strstr(c->cbuff, "Content-Length:");
- /* for cacky servers like NCSA which break the spec and send a
- lower case 'l' */
- if(!cl) cl = strstr(c->cbuff, "Content-length:");
- if(cl) {
- c->keepalive=1;
- c->length = atoi(cl+16);
- }
- }
- c->bread += c->cbx - (s+l-c->cbuff) + r-tocopy;
- totalbread += c->bread;
- }
- }
- else {
- /* outside header, everything we have read is entity body */
- c->bread += r;
- totalbread += r;
- }
-
- if(c->keepalive && (c->bread >= c->length)) {
- /* finished a keep-alive connection */
- good++; doneka++;
- /* save out time */
- if(good==1) {
- /* first time here */
- doclen = c->bread;
- } else if(c->bread!=doclen) { bad++; err_length++; }
- if(done < requests) {
- struct data s;
- gettimeofday(&c->done,0);
- s.read = c->read;
- s.ctime = timedif(c->connect, c->start);
- s.time = timedif(c->done, c->start);
- stats[done++] = s;
- }
- c->keepalive = 0; c->length = 0; c->gotheader=0; c->cbx = 0;
- c->read = c->bread = 0;
- write_request(c);
- c->start = c->connect; /* zero connect time with keep-alive */
- }
-}
-
-/* --------------------------------------------------------- */
-
-/* run the tests */
-
-int test()
-{
- struct timeval timeout, now;
- fd_set sel_read, sel_except, sel_write;
- int i;
-
- {
- /* get server information */
- struct hostent *he;
- he = gethostbyname(machine);
- if (!he) err("gethostbyname");
- server.sin_family = he->h_addrtype;
- server.sin_port = htons(port);
- server.sin_addr.s_addr = ((unsigned long *)(he->h_addr_list[0]))[0];
- }
-
- con = malloc(concurrency*sizeof(struct connection));
- memset(con,0,concurrency*sizeof(struct connection));
-
- stats = malloc(requests * sizeof(struct data));
-
- FD_ZERO(&readbits);
- FD_ZERO(&writebits);
-
- /* setup request */
- sprintf(request,"GET %s HTTP/1.0\r\nUser-Agent: ZeusBench/1.0\r\n"
- "%sHost: %s\r\nAccept: */*\r\n\r\n", file,
- keepalive?"Connection: Keep-Alive\r\n":"", machine );
-
- reqlen = strlen(request);
-
- /* ok - lets start */
- gettimeofday(&start,0);
-
- /* initialise lots of requests */
- for(i=0; i<concurrency; i++) start_connect(&con[i]);
-
- while(done<requests) {
- int n;
- /* setup bit arrays */
- memcpy(&sel_except, &readbits, sizeof(readbits));
- memcpy(&sel_read, &readbits, sizeof(readbits));
- memcpy(&sel_write, &writebits, sizeof(readbits));
-
- /* check for time limit expiry */
- gettimeofday(&now,0);
- if(tlimit && timedif(now,start) > (tlimit*1000)) {
- requests=done; /* so stats are correct */
- output_results();
- }
-
- /* Timeout of 30 seconds. */
- timeout.tv_sec=30; timeout.tv_usec=0;
- n=select(256, &sel_read, &sel_write, &sel_except, &timeout);
- if(!n) {
- printf("\nServer timed out\n\n");
- exit(1);
- }
- if(n<1) err("select");
-
- for(i=0; i<concurrency; i++) {
- int s = con[i].fd;
- if(FD_ISSET(s, &sel_except)) {
- bad++;
- err_except++;
- start_connect(&con[i]);
- continue;
- }
- if(FD_ISSET(s, &sel_read)) read_connection(&con[i]);
- if(FD_ISSET(s, &sel_write)) write_request(&con[i]);
- }
- if(done>=requests) output_results();
- }
- return 0;
-}
-
-/* ------------------------------------------------------- */
-
-/* display usage information */
-
-void usage(char *progname) {
- printf("\nZeusBench v1.0\n\n");
- printf("Usage: %s <machine> <file> [-k] [-n requests | -t timelimit (sec)]"
- "\n\t\t[-c concurrency] [-p port] \n",progname);
- printf("Filename should start with a '/' e.g. /index.html\n\n");
- exit(EINVAL);
-}
-
-/* ------------------------------------------------------- */
-
-/* sort out command-line args and call test */
-
-int main(int argc, char **argv) {
- int c;
- if (argc < 3) usage(argv[0]);
-
- machine = argv[1];
- file = argv[2];
- optind = 3;
- while ((c = getopt(argc,argv,"p:n:c:d:t:d:k"))>0) {
- switch(c) {
- case 'd':
- break;
- case 'n':
- requests = atoi(optarg);
- if(!requests) {
- printf("Invalid number of requests\n");
- exit(1);
- }
- break;
- case 'k':
- keepalive=1;
- break;
- case 'c':
- concurrency = atoi(optarg);
- break;
- case 'p':
- port = atoi(optarg);
- break;
- case 't':
- tlimit = atoi(optarg);
- requests = MAX_REQUESTS; /* need to size data array on something */
- break;
- default:
- usage(argv[0]);
- break;
- }
- }
- test();
- return 0;
-}
-
-
-
-
-
-