diff options
author | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2004-10-11 19:59:58 +0000 |
---|---|---|
committer | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2004-10-11 19:59:58 +0000 |
commit | 1ac419d11e26600ca9b28f216cabb5c77b27adaf (patch) | |
tree | d63c6233f5787ea62d294c4f892514b962572075 /test/request.c | |
parent | 39aabf2eb660abdc724a5c4b0629c3e360c2bff7 (diff) | |
download | neon-1ac419d11e26600ca9b28f216cabb5c77b27adaf.tar.gz |
Allow response body callbacks to return an error:
* src/ne_request.h (ne_block_reader): Return error code.
* src/ne_request.c (ne_read_response_block): Fail with -1 if a reader
callback returns an error.
* src/ne_xml.c (ne_xml_parse_v): Return 0 (for the moment).
* src/ne_basic.c (get_to_fd): Return error.
* src/ne_compress.c (gz_reader): Return 0 (mostly), or pass through.
* src/ne_auth.c (auth_body_reader): Return 0.
* test/compress.c (reader): Return error.
* test/request.c (collector): Return 0.
(abortive_reader, abort_reader): New functions.
git-svn-id: http://svn.webdav.org/repos/projects/neon/trunk@308 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
Diffstat (limited to 'test/request.c')
-rw-r--r-- | test/request.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/test/request.c b/test/request.c index fba94db..1d24ff2 100644 --- a/test/request.c +++ b/test/request.c @@ -69,10 +69,11 @@ static int finish_request(void) #define TE_CHUNKED "Transfer-Encoding: chunked\r\n" /* takes response body chunks and appends them to a buffer. */ -static void collector(void *ud, const char *data, size_t len) +static int collector(void *ud, const char *data, size_t len) { ne_buffer *buf = ud; ne_buffer_append(buf, data, len); + return 0; } typedef ne_request *(*construct_request)(ne_session *sess, void *userdata); @@ -1629,12 +1630,47 @@ static int idna_hostname(void) ne_session_destroy(sess); return OK; +} #else static int idna_hostname(void) { t_context("IDNA support not enabled"); return SKIP; +} #endif + +static int abortive_reader(void *userdata, const char *buf, size_t len) +{ + ne_session *sess = userdata; + if (len == 5 && strncmp(buf, "abcde", 5) == 0) { + ne_set_error(sess, "Reader callback failed"); + } else { + ne_set_error(sess, "Reader callback called with length %" NE_FMT_SIZE_T, + len); + } + return NE_ERROR; +} + +static int abort_reader(void) +{ + ne_session *sess; + ne_request *req; + int ret; + + CALL(make_session(&sess, single_serve_string, + RESP200 "Content-Length: 5\r\n\r\n" + "abcde")); + + req = ne_request_create(sess, "GET", "/foo"); + ne_add_response_body_reader(req, ne_accept_2xx, abortive_reader, sess); + ret = ne_request_dispatch(req); + ONV(ret != NE_ERROR, ("request did not fail with NE_ERROR: %d", ret)); + ONV(strcmp(ne_get_error(sess), "Reader callback failed") != 0, + ("unexpected session error string: %s", ne_get_error(sess))); + ne_request_destroy(req); + ne_session_destroy(sess); + CALL(await_server()); + return OK; } ne_test tests[] = { @@ -1710,5 +1746,6 @@ ne_test tests[] = { T(versions), T(hook_create_req), T(idna_hostname), + T(abort_reader), T(NULL) }; |