[glib] gio/tests/converter-stream: add a new test, rename an old one
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] gio/tests/converter-stream: add a new test, rename an old one
- Date: Tue, 17 Jul 2012 20:23:31 +0000 (UTC)
commit 2855b827da44144c76b72d8cfec9599a835df4ea
Author: Dan Winship <danw gnome org>
Date: Tue Jul 17 16:21:03 2012 -0400
gio/tests/converter-stream: add a new test, rename an old one
Add a test that the decompressor input streams handle truncated data
correctly. (They do; I wrote the test thinking there was a bug there,
but there isn't.)
Also, rename the "corruption" tests to "roundtrip", since "corruption"
makes it sound like we're testing how the converters deal with
corrupted data, as opposed to merely testing that they don't corrupt
data themselves. And fix the bug reference.
gio/tests/converter-stream.c | 112 +++++++++++++++++++++++++++++++-----------
1 files changed, 83 insertions(+), 29 deletions(-)
---
diff --git a/gio/tests/converter-stream.c b/gio/tests/converter-stream.c
index d387f7b..4404fb8 100644
--- a/gio/tests/converter-stream.c
+++ b/gio/tests/converter-stream.c
@@ -728,9 +728,16 @@ test_converter_leftover (void)
#define DATA_LENGTH 1000000
+typedef struct {
+ const gchar *path;
+ GZlibCompressorFormat format;
+ gint level;
+} CompressorTest;
+
static void
-test_corruption (GZlibCompressorFormat format, gint level)
+test_roundtrip (gconstpointer data)
{
+ const CompressorTest *test = data;
GError *error = NULL;
guint32 *data0, *data1;
gsize data1_size;
@@ -741,6 +748,8 @@ test_corruption (GZlibCompressorFormat format, gint level)
GZlibCompressorFormat fmt;
gint lvl;
+ g_test_bug ("619945");
+
data0 = g_malloc (DATA_LENGTH * sizeof (guint32));
for (i = 0; i < DATA_LENGTH; i++)
data0[i] = g_random_int ();
@@ -749,7 +758,7 @@ test_corruption (GZlibCompressorFormat format, gint level)
DATA_LENGTH * sizeof (guint32), NULL);
ostream1 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
- compressor = G_CONVERTER (g_zlib_compressor_new (format, level));
+ compressor = G_CONVERTER (g_zlib_compressor_new (test->format, test->level));
costream1 = g_converter_output_stream_new (ostream1, compressor);
g_assert (g_converter_output_stream_get_converter (G_CONVERTER_OUTPUT_STREAM (costream1)) == compressor);
@@ -760,8 +769,8 @@ test_corruption (GZlibCompressorFormat format, gint level)
g_converter_reset (compressor);
g_object_get (compressor, "format", &fmt, "level", &lvl, NULL);
- g_assert_cmpint (fmt, ==, format);
- g_assert_cmpint (lvl, ==, level);
+ g_assert_cmpint (fmt, ==, test->format);
+ g_assert_cmpint (lvl, ==, test->level);
g_object_unref (compressor);
data1 = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (ostream1));
data1_size = g_memory_output_stream_get_data_size (
@@ -770,7 +779,7 @@ test_corruption (GZlibCompressorFormat format, gint level)
g_object_unref (istream0);
istream1 = g_memory_input_stream_new_from_data (data1, data1_size, g_free);
- decompressor = G_CONVERTER (g_zlib_decompressor_new (format));
+ decompressor = G_CONVERTER (g_zlib_decompressor_new (test->format));
cistream1 = g_converter_input_stream_new (istream1, decompressor);
ostream2 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
@@ -785,7 +794,7 @@ test_corruption (GZlibCompressorFormat format, gint level)
g_object_unref (istream1);
g_converter_reset (decompressor);
g_object_get (decompressor, "format", &fmt, NULL);
- g_assert_cmpint (fmt, ==, format);
+ g_assert_cmpint (fmt, ==, test->format);
g_object_unref (decompressor);
g_object_unref (cistream1);
g_object_unref (ostream2);
@@ -794,22 +803,6 @@ test_corruption (GZlibCompressorFormat format, gint level)
typedef struct {
const gchar *path;
- GZlibCompressorFormat format;
- gint level;
-} CompressorTest;
-
-static void
-test_roundtrip (gconstpointer data)
-{
- const CompressorTest *test = data;
-
- g_test_bug ("162549");
-
- test_corruption (test->format, test->level);
-}
-
-typedef struct {
- const gchar *path;
const gchar *charset_in;
const gchar *text_in;
const gchar *charset_out;
@@ -1098,24 +1091,82 @@ test_converter_pollable (void)
g_object_unref (compressor);
}
+static void
+test_truncation (gconstpointer data)
+{
+ const CompressorTest *test = data;
+ GError *error = NULL;
+ guint32 *data0, *data1;
+ gsize data1_size;
+ gint i;
+ GInputStream *istream0, *istream1, *cistream1;
+ GOutputStream *ostream1, *ostream2, *costream1;
+ GConverter *compressor, *decompressor;
+
+ data0 = g_malloc (DATA_LENGTH * sizeof (guint32));
+ for (i = 0; i < DATA_LENGTH; i++)
+ data0[i] = g_random_int ();
+
+ istream0 = g_memory_input_stream_new_from_data (data0,
+ DATA_LENGTH * sizeof (guint32), NULL);
+
+ ostream1 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+ compressor = G_CONVERTER (g_zlib_compressor_new (test->format, -1));
+ costream1 = g_converter_output_stream_new (ostream1, compressor);
+ g_assert (g_converter_output_stream_get_converter (G_CONVERTER_OUTPUT_STREAM (costream1)) == compressor);
+
+ g_output_stream_splice (costream1, istream0, 0, NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (costream1);
+ g_object_unref (compressor);
+
+ data1 = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (ostream1));
+ data1_size = g_memory_output_stream_get_data_size (
+ G_MEMORY_OUTPUT_STREAM (ostream1));
+ g_object_unref (ostream1);
+ g_object_unref (istream0);
+
+ /* truncate */
+ data1_size /= 2;
+
+ istream1 = g_memory_input_stream_new_from_data (data1, data1_size, g_free);
+ decompressor = G_CONVERTER (g_zlib_decompressor_new (test->format));
+ cistream1 = g_converter_input_stream_new (istream1, decompressor);
+
+ ostream2 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
+
+ g_output_stream_splice (ostream2, cistream1, 0, NULL, &error);
+ g_assert_error (error, G_IO_ERROR, G_IO_ERROR_PARTIAL_INPUT);
+
+ g_object_unref (istream1);
+ g_object_unref (decompressor);
+ g_object_unref (cistream1);
+ g_object_unref (ostream2);
+ g_free (data0);
+}
int
main (int argc,
char *argv[])
{
CompressorTest compressor_tests[] = {
- { "/converter-output-stream/corruption/zlib-0", G_ZLIB_COMPRESSOR_FORMAT_ZLIB, 0 },
- { "/converter-output-stream/corruption/zlib-9", G_ZLIB_COMPRESSOR_FORMAT_ZLIB, 9 },
- { "/converter-output-stream/corruption/gzip-0", G_ZLIB_COMPRESSOR_FORMAT_GZIP, 0 },
- { "/converter-output-stream/corruption/gzip-9", G_ZLIB_COMPRESSOR_FORMAT_GZIP, 9 },
- { "/converter-output-stream/corruption/raw-0", G_ZLIB_COMPRESSOR_FORMAT_RAW, 0 },
- { "/converter-output-stream/corruption/raw-9", G_ZLIB_COMPRESSOR_FORMAT_RAW, 9 },
+ { "/converter-output-stream/roundtrip/zlib-0", G_ZLIB_COMPRESSOR_FORMAT_ZLIB, 0 },
+ { "/converter-output-stream/roundtrip/zlib-9", G_ZLIB_COMPRESSOR_FORMAT_ZLIB, 9 },
+ { "/converter-output-stream/roundtrip/gzip-0", G_ZLIB_COMPRESSOR_FORMAT_GZIP, 0 },
+ { "/converter-output-stream/roundtrip/gzip-9", G_ZLIB_COMPRESSOR_FORMAT_GZIP, 9 },
+ { "/converter-output-stream/roundtrip/raw-0", G_ZLIB_COMPRESSOR_FORMAT_RAW, 0 },
+ { "/converter-output-stream/roundtrip/raw-9", G_ZLIB_COMPRESSOR_FORMAT_RAW, 9 },
+ };
+ CompressorTest truncation_tests[] = {
+ { "/converter-input-stream/truncation/zlib", G_ZLIB_COMPRESSOR_FORMAT_ZLIB, 0 },
+ { "/converter-input-stream/truncation/gzip", G_ZLIB_COMPRESSOR_FORMAT_GZIP, 0 },
+ { "/converter-input-stream/truncation/raw", G_ZLIB_COMPRESSOR_FORMAT_RAW, 0 },
};
CharsetTest charset_tests[] = {
{ "/converter-input-stream/charset/utf8->latin1", "UTF-8", "\303\205rr Sant\303\251", "ISO-8859-1", "\305rr Sant\351", 0 },
{ "/converter-input-stream/charset/latin1->utf8", "ISO-8859-1", "\305rr Sant\351", "UTF-8", "\303\205rr Sant\303\251", 0 },
{ "/converter-input-stream/charset/fallbacks", "UTF-8", "Some characters just don't fit into latin1: Ï×", "ISO-8859-1", "Some characters just don't fit into latin1: \\CF\\80\\D7\\90", 4 },
-
};
gint i;
@@ -1131,6 +1182,9 @@ main (int argc,
for (i = 0; i < G_N_ELEMENTS (compressor_tests); i++)
g_test_add_data_func (compressor_tests[i].path, &compressor_tests[i], test_roundtrip);
+ for (i = 0; i < G_N_ELEMENTS (truncation_tests); i++)
+ g_test_add_data_func (truncation_tests[i].path, &truncation_tests[i], test_truncation);
+
for (i = 0; i < G_N_ELEMENTS (charset_tests); i++)
g_test_add_data_func (charset_tests[i].path, &charset_tests[i], test_charset);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]