You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
|
|
#include <lighttpd/base.h>
|
|
|
|
#define perror(msg) g_error("(%s:%i) %s failed: %s", __FILE__, __LINE__, msg, g_strerror(errno))
|
|
|
|
static liChunkQueue* cq_from_str(const gchar *s, size_t len) {
|
|
liChunkQueue *cq = li_chunkqueue_new();
|
|
li_chunkqueue_append_mem(cq, s, len);
|
|
return cq;
|
|
}
|
|
|
|
static void cq_load_str(liChunkQueue *cq, const gchar *s, size_t len) {
|
|
li_chunkqueue_reset(cq);
|
|
li_chunkqueue_append_mem(cq, s, len);
|
|
}
|
|
|
|
static void cq_assert_eq(liChunkQueue *cq, const gchar *s, size_t len) {
|
|
GString *buf = g_string_sized_new(cq->length);
|
|
g_assert(li_chunkqueue_extract_to(NULL, cq, cq->length, buf));
|
|
g_assert(0 == memcmp(s, buf->str, len));
|
|
g_string_free(buf, TRUE);
|
|
}
|
|
|
|
|
|
static void test_filter_chunked_decode(void) {
|
|
liChunkQueue *cq = li_chunkqueue_new(), *cq2 = li_chunkqueue_new();
|
|
liFilterDecodeState decode_state;
|
|
|
|
cq_load_str(cq, CONST_STR_LEN(
|
|
"14\r\n"
|
|
"01234567890123456789" "\r\n"
|
|
"0\r\nrandom foo: xx\r\n\r\n"
|
|
"xxx" /* next message */
|
|
));
|
|
cq->is_closed = TRUE;
|
|
memset(&decode_state, 0, sizeof(decode_state));
|
|
li_chunkqueue_reset(cq2);
|
|
g_assert(LI_HANDLER_GO_ON == li_filter_chunked_decode(NULL, cq2, cq, &decode_state));
|
|
cq_assert_eq(cq2, CONST_STR_LEN(
|
|
"01234567890123456789"
|
|
));
|
|
g_assert(cq2->is_closed);
|
|
cq_assert_eq(cq, CONST_STR_LEN(
|
|
"xxx"
|
|
));
|
|
|
|
li_chunkqueue_free(cq);
|
|
li_chunkqueue_free(cq2);
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
g_test_init(&argc, &argv, NULL);
|
|
|
|
g_test_add_func("/chunk/filter_chunked_decode", test_filter_chunked_decode);
|
|
|
|
return g_test_run();
|
|
}
|