summaryrefslogtreecommitdiff
path: root/test/request.c
diff options
context:
space:
mode:
authorjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2004-10-11 19:59:58 +0000
committerjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2004-10-11 19:59:58 +0000
commit1ac419d11e26600ca9b28f216cabb5c77b27adaf (patch)
treed63c6233f5787ea62d294c4f892514b962572075 /test/request.c
parent39aabf2eb660abdc724a5c4b0629c3e360c2bff7 (diff)
downloadneon-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.c39
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)
};