[libsoup] chunk-test: add a check that wrote-body-data gives the right data



commit 9c89179ca1ee1476da7b763702e1d72b3cbd3242
Author: Dan Winship <danw gnome org>
Date:   Fri Jan 27 13:25:24 2012 -0500

    chunk-test: add a check that wrote-body-data gives the right data
    
    (This was already working, but not tested, on master, but it was
    broken on a work branch.)

 tests/chunk-test.c |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)
---
diff --git a/tests/chunk-test.c b/tests/chunk-test.c
index c6b4a42..3805fb7 100644
--- a/tests/chunk-test.c
+++ b/tests/chunk-test.c
@@ -403,6 +403,60 @@ do_temporary_test (SoupSession *session, SoupURI *base_uri)
 	g_object_unref (msg);
 }
 
+#define LARGE_CHUNK_SIZE 1000000
+
+typedef struct {
+	SoupBuffer *buf;
+	gsize offset;
+} LargeChunkData;
+
+static void
+large_wrote_body_data (SoupMessage *msg, SoupBuffer *chunk, gpointer user_data)
+{
+	LargeChunkData *lcd = user_data;
+
+	if (memcmp (chunk->data, lcd->buf->data + lcd->offset, chunk->length) != 0) {
+		debug_printf (1, "  chunk data mismatch at %ld\n", (long)lcd->offset);
+		errors++;
+	} else
+		debug_printf (2, "  chunk data match at %ld\n", (long)lcd->offset);
+	lcd->offset += chunk->length;
+}
+
+static void
+do_large_chunk_test (SoupSession *session, SoupURI *base_uri)
+{
+	SoupMessage *msg;
+	char *buf_data;
+	int i;
+	LargeChunkData lcd;
+
+	debug_printf (1, "PUT w/ large chunk\n");
+
+	msg = soup_message_new_from_uri ("PUT", base_uri);
+
+	buf_data = g_malloc0 (LARGE_CHUNK_SIZE);
+	for (i = 0; i < LARGE_CHUNK_SIZE; i++)
+		buf_data[i] = i & 0xFF;
+	lcd.buf = soup_buffer_new (SOUP_MEMORY_TAKE, buf_data, LARGE_CHUNK_SIZE);
+	lcd.offset = 0;
+	soup_message_body_append_buffer (msg->request_body, lcd.buf);
+	soup_message_body_set_accumulate (msg->request_body, FALSE);
+
+	g_signal_connect (msg, "wrote_body_data",
+			  G_CALLBACK (large_wrote_body_data), &lcd);
+	soup_session_send_message (session, msg);
+
+	if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
+		debug_printf (1, "  message failed: %d %s\n",
+			      msg->status_code, msg->reason_phrase);
+		errors++;
+	}
+
+	soup_buffer_free (lcd.buf);
+	g_object_unref (msg);
+}
+
 static void
 do_chunk_tests (SoupURI *base_uri)
 {
@@ -422,6 +476,8 @@ do_chunk_tests (SoupURI *base_uri)
 	do_response_test (session, base_uri);
 	debug_printf (2, "\n\n");
 	do_temporary_test (session, base_uri);
+	debug_printf (2, "\n\n");
+	do_large_chunk_test (session, base_uri);
 	soup_test_session_abort_unref (session);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]