diff options
| author | Richard Nyberg <rnyberg@murmeldjur.se> | 2006-11-08 08:54:49 +0000 |
|---|---|---|
| committer | Richard Nyberg <rnyberg@murmeldjur.se> | 2006-11-08 08:54:49 +0000 |
| commit | 95371d8453eb44e5bb17423ec396e1e4bf86acd7 (patch) | |
| tree | a026984cc47668feaf2a7b08434aa7cfa167e993 /libevent/test/regress_http.c | |
| parent | ba4efecb6df9cdc5cfaba42b8af75ea4edcc7517 (diff) | |
| download | btpd-95371d8453eb44e5bb17423ec396e1e4bf86acd7.tar.gz btpd-95371d8453eb44e5bb17423ec396e1e4bf86acd7.zip | |
Remove files not needed by btpd. Make the build scripts more suitable for
btpd.
Diffstat (limited to 'libevent/test/regress_http.c')
| -rw-r--r-- | libevent/test/regress_http.c | 426 |
1 files changed, 0 insertions, 426 deletions
diff --git a/libevent/test/regress_http.c b/libevent/test/regress_http.c deleted file mode 100644 index a905b03..0000000 --- a/libevent/test/regress_http.c +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright (c) 2003-2006 Niels Provos <provos@citi.umich.edu> - * 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 name of the author may not be used to endorse or promote products - * derived from this software without 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. - */ - -#ifdef WIN32 -#include <winsock2.h> -#include <windows.h> -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <sys/types.h> -#include <sys/stat.h> -#ifdef HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#include <sys/queue.h> -#ifndef WIN32 -#include <sys/socket.h> -#include <sys/signal.h> -#include <unistd.h> -#endif -#include <netdb.h> -#include <fcntl.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include "event.h" -#include "evhttp.h" -#include "log.h" -#include "http-internal.h" - -extern int pair[]; -extern int test_ok; - -static struct evhttp *http; - -void http_basic_cb(struct evhttp_request *req, void *arg); -void http_post_cb(struct evhttp_request *req, void *arg); - -struct evhttp * -http_setup(short *pport) -{ - int i; - struct evhttp *myhttp; - short port = -1; - - /* Try a few different ports */ - for (i = 0; i < 50; ++i) { - myhttp = evhttp_start("127.0.0.1", 8080 + i); - if (myhttp != NULL) { - port = 8080 + i; - break; - } - } - - if (port == -1) - event_errx(1, "Could not start web server"); - - /* Register a callback for certain types of requests */ - evhttp_set_cb(myhttp, "/test", http_basic_cb, NULL); - evhttp_set_cb(myhttp, "/postit", http_post_cb, NULL); - - *pport = port; - return (myhttp); -} - -int -http_connect(const char *address, u_short port) -{ - /* Stupid code for connecting */ - struct addrinfo ai, *aitop; - char strport[NI_MAXSERV]; - int fd; - - memset(&ai, 0, sizeof (ai)); - ai.ai_family = AF_INET; - ai.ai_socktype = SOCK_STREAM; - snprintf(strport, sizeof (strport), "%d", port); - if (getaddrinfo(address, strport, &ai, &aitop) != 0) { - event_warn("getaddrinfo"); - return (-1); - } - - fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd == -1) - event_err(1, "socket failed"); - - if (connect(fd, aitop->ai_addr, aitop->ai_addrlen) == -1) - event_err(1, "connect failed"); - - freeaddrinfo(aitop); - - return (fd); -} - -void -http_readcb(struct bufferevent *bev, void *arg) -{ - const char *what = "This is funny"; - - event_debug(("%s: %s\n", __func__, EVBUFFER_DATA(bev->input))); - - if (evbuffer_find(bev->input, what, strlen(what)) != NULL) { - struct evhttp_request *req = evhttp_request_new(NULL, NULL); - req->kind = EVHTTP_RESPONSE; - int done = evhttp_parse_lines(req, bev->input); - - if (done == 1 && - evhttp_find_header(req->input_headers, - "Content-Type") != NULL) - test_ok++; - evhttp_request_free(req); - bufferevent_disable(bev, EV_READ); - event_loopexit(NULL); - } -} - -void -http_writecb(struct bufferevent *bev, void *arg) -{ - if (EVBUFFER_LENGTH(bev->output) == 0) { - /* enable reading of the reply */ - bufferevent_enable(bev, EV_READ); - test_ok++; - } -} - -void -http_errorcb(struct bufferevent *bev, short what, void *arg) -{ - test_ok = -2; - event_loopexit(NULL); -} - -void -http_basic_cb(struct evhttp_request *req, void *arg) -{ - event_debug((stderr, "%s: called\n", __func__)); - - struct evbuffer *evb = evbuffer_new(); - evbuffer_add_printf(evb, "This is funny"); - - evhttp_send_reply(req, HTTP_OK, "Everything is fine", evb); - - evbuffer_free(evb); -} - -void -http_basic_test(void) -{ - struct bufferevent *bev; - int fd; - char *http_request; - short port = -1; - - test_ok = 0; - fprintf(stdout, "Testing Basic HTTP Server: "); - - http = http_setup(&port); - - fd = http_connect("127.0.0.1", port); - - /* Stupid thing to send a request */ - bev = bufferevent_new(fd, http_readcb, http_writecb, - http_errorcb, NULL); - - http_request = - "GET /test HTTP/1.1\r\n" - "Host: somehost \r\n" - "\r\n"; - - bufferevent_write(bev, http_request, strlen(http_request)); - - event_dispatch(); - - bufferevent_free(bev); - close(fd); - - evhttp_free(http); - - if (test_ok != 2) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void http_request_done(struct evhttp_request *, void *); - -void -http_connection_test(void) -{ - short port = -1; - struct evhttp_connection *evcon = NULL; - struct evhttp_request *req = NULL; - - test_ok = 0; - fprintf(stdout, "Testing Basic HTTP Connection: "); - - http = http_setup(&port); - - evcon = evhttp_connection_new("127.0.0.1", port); - if (evcon == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* - * At this point, we want to schedule a request to the HTTP - * server using our make request method. - */ - - req = evhttp_request_new(http_request_done, NULL); - - /* Add the information that we care about */ - evhttp_add_header(req->output_headers, "Host", "somehost"); - - /* We give ownership of the request to the connection */ - if (evhttp_make_request(evcon, req, EVHTTP_REQ_GET, "/test") == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - event_dispatch(); - - evhttp_connection_free(evcon); - evhttp_free(http); - - if (test_ok != 1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void -http_request_done(struct evhttp_request *req, void *arg) -{ - const char *what = "This is funny"; - - if (req->response_code != HTTP_OK) { - - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (evhttp_find_header(req->input_headers, "Content-Type") == NULL) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) { - fprintf(stderr, "FAILED\n"); - exit(1); - } - - test_ok = 1; - event_loopexit(NULL); -} - -/* - * HTTP POST test. - */ - -void http_postrequest_done(struct evhttp_request *, void *); - -#define POST_DATA "Okay. Not really printf" - -void -http_post_test(void) -{ - short port = -1; - struct evhttp_connection *evcon = NULL; - struct evhttp_request *req = NULL; - - test_ok = 0; - fprintf(stdout, "Testing HTTP POST Request: "); - - http = http_setup(&port); - - evcon = evhttp_connection_new("127.0.0.1", port); - if (evcon == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* - * At this point, we want to schedule an HTTP POST request - * server using our make request method. - */ - - req = evhttp_request_new(http_postrequest_done, NULL); - if (req == NULL) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - /* Add the information that we care about */ - evhttp_add_header(req->output_headers, "Host", "somehost"); - evbuffer_add_printf(req->output_buffer, POST_DATA); - - if (evhttp_make_request(evcon, req, EVHTTP_REQ_POST, "/postit") == -1) { - fprintf(stdout, "FAILED\n"); - exit(1); - } - - event_dispatch(); - - evhttp_connection_free(evcon); - evhttp_free(http); - - if (test_ok != 1) { - fprintf(stdout, "FAILED: %d\n", test_ok); - exit(1); - } - - fprintf(stdout, "OK\n"); -} - -void -http_post_cb(struct evhttp_request *req, void *arg) -{ - event_debug((stderr, "%s: called\n", __func__)); - - /* Yes, we are expecting a post request */ - if (req->type != EVHTTP_REQ_POST) { - fprintf(stdout, "FAILED (post type)\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(POST_DATA)) { - fprintf(stdout, "FAILED (length: %ld vs %ld)\n", - EVBUFFER_LENGTH(req->input_buffer), strlen(POST_DATA)); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), POST_DATA, - strlen(POST_DATA))) { - fprintf(stdout, "FAILED (data)\n"); - fprintf(stdout, "Got :%s\n", EVBUFFER_DATA(req->input_buffer)); - fprintf(stdout, "Want:%s\n", POST_DATA); - exit(1); - } - - struct evbuffer *evb = evbuffer_new(); - evbuffer_add_printf(evb, "This is funny"); - - evhttp_send_reply(req, HTTP_OK, "Everything is fine", evb); - - evbuffer_free(evb); -} - -void -http_postrequest_done(struct evhttp_request *req, void *arg) -{ - const char *what = "This is funny"; - - if (req->response_code != HTTP_OK) { - - fprintf(stderr, "FAILED (response code)\n"); - exit(1); - } - - if (evhttp_find_header(req->input_headers, "Content-Type") == NULL) { - fprintf(stderr, "FAILED (content type)\n"); - exit(1); - } - - if (EVBUFFER_LENGTH(req->input_buffer) != strlen(what)) { - fprintf(stderr, "FAILED (length %ld vs %ld)\n", - EVBUFFER_LENGTH(req->input_buffer), strlen(what)); - exit(1); - } - - if (memcmp(EVBUFFER_DATA(req->input_buffer), what, strlen(what)) != 0) { - fprintf(stderr, "FAILED (data)\n"); - exit(1); - } - - test_ok = 1; - event_loopexit(NULL); -} - - -void -http_suite(void) -{ - http_basic_test(); - http_connection_test(); - http_post_test(); -} |