diff options
author | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2005-06-22 08:21:48 +0000 |
---|---|---|
committer | joe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845> | 2005-06-22 08:21:48 +0000 |
commit | 11c61cf9d5a3403166873d8a5717211f9aa0cd1a (patch) | |
tree | ed788737ea7dfdf70d553792820c6f486d0021c0 /test/compress.c | |
parent | d3fa82a290c9a8264ddc18c31010d6a6dec3c871 (diff) | |
download | neon-11c61cf9d5a3403166873d8a5717211f9aa0cd1a.tar.gz |
Merge r627, r629, r631 from 0.25.x branch:
* src/ne_auth.c (ah_post_send): Print auth_hdr safely.
Remove unused SAFELY macro.
* src/ne_compress.c (process_footer): Don't invoke reader callback
with len=0 here as well when end-of-response is really reached.
(do_inflate): Do pass on the reader callback return value.
* test/compress.c (reader): Catch multiple invocations with len=0.
(retry_accept): Reset the reader state.
(reader_abort, compress_abort): New functions.
* src/ne_xml.c (end_element): Use NE_DBG_XML debug channel for
consistency.
git-svn-id: http://svn.webdav.org/repos/projects/neon/trunk@636 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
Diffstat (limited to 'test/compress.c')
-rw-r--r-- | test/compress.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/compress.c b/test/compress.c index f40db15..af4edaf 100644 --- a/test/compress.c +++ b/test/compress.c @@ -58,6 +58,14 @@ static int reader(void *ud, const char *block, size_t len) if (failed == f_mismatch) return -1; + /* catch multiple len == 0 call as issued by 0.25.0 only: */ + if (failed == f_complete) { + NE_DEBUG(NE_DBG_HTTP, "reader: called after complete, len=%d\n", + (int)len); + failed = f_mismatch; + return -1; + } + if (failed == f_partial && len == 0) { if (b->len != 0) { NE_DEBUG(NE_DBG_HTTP, "reader: got length %d at EOF\n", @@ -357,6 +365,7 @@ static int retry_accept(void *ud, ne_request *req, const ne_status *st) } expect->len = 5; + failed = f_partial; /* reset the state */ return 1; } @@ -369,6 +378,52 @@ static int retry_compress(void) return retry_compress_helper(retry_accept, &resp, &expect); } +#define READER_ABORT_ERR "reader_abort error string" + +static int reader_abort(void *ud, const char *buf, size_t len) +{ + ne_session *sess = ud; + ne_set_error(sess, READER_ABORT_ERR); + return len; +} + +/* check that a callback abort does abort the response */ +static int compress_abort(void) +{ + ne_session *sess; + ne_request *req; + struct serve_file_args sfargs; + ne_decompress *dc; + int ret; + + sfargs.fname = "file1.gz"; + sfargs.headers = "Content-Encoding: gzip\r\n"; + sfargs.chunks = 0; + + CALL(make_session(&sess, serve_file, &sfargs)); + + req = ne_request_create(sess, "GET", "/abort"); + + dc = ne_decompress_reader(req, ne_accept_2xx, reader_abort, sess); + + ret = ne_request_dispatch(req); + + reap_server(); + + ONN("request was not aborted", ret != NE_ERROR); + ONV(strcmp(ne_get_error(sess), READER_ABORT_ERR), + ("session error was %s not %s", + ne_get_error(sess), READER_ABORT_ERR)); + + reap_server(); + ne_decompress_destroy(dc); + ne_request_destroy(req); + ne_session_destroy(sess); + + return OK; + +} + ne_test tests[] = { T_LEAKY(init), T(not_compressed), @@ -390,5 +445,6 @@ ne_test tests[] = { T(chunked_10b_wn), T(retry_notcompress), T_XFAIL(retry_compress), + T(compress_abort), T(NULL) }; |