summaryrefslogtreecommitdiff
path: root/test/compress.c
diff options
context:
space:
mode:
authorjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2005-06-22 08:21:48 +0000
committerjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2005-06-22 08:21:48 +0000
commit11c61cf9d5a3403166873d8a5717211f9aa0cd1a (patch)
treeed788737ea7dfdf70d553792820c6f486d0021c0 /test/compress.c
parentd3fa82a290c9a8264ddc18c31010d6a6dec3c871 (diff)
downloadneon-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.c56
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)
};