[gmime] Added more tests for OpenPGP detection filtering
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Added more tests for OpenPGP detection filtering
- Date: Wed, 20 Dec 2017 17:10:02 +0000 (UTC)
commit 1f873de512256c724969781d8d9007940e7d366c
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date: Wed Dec 13 13:28:09 2017 -0500
Added more tests for OpenPGP detection filtering
tests/data/pgp/encrypted-message.txt | 26 +++
tests/data/pgp/encrypted-message.txt.openpgp-block | 17 ++
tests/test-pgp.c | 25 ++-
tests/testsuite.c | 197 ++++++++++++++++++++
tests/testsuite.h | 26 +++
5 files changed, 287 insertions(+), 4 deletions(-)
---
diff --git a/tests/data/pgp/encrypted-message.txt b/tests/data/pgp/encrypted-message.txt
new file mode 100644
index 0000000..5cce8b9
--- /dev/null
+++ b/tests/data/pgp/encrypted-message.txt
@@ -0,0 +1,26 @@
+From: GMime Unit Tests <no.user@no.domain>
+To: GMime Unit Tests <no.user@no.domain>
+Subject: PGP encrypted message
+MIME-Version: 1.0
+Content-Type: text/plain
+
+-----BEGIN PGP MESSAGE-----
+
+hQIOAwTJ0obO8knpEAgAiSHHrzUzh9J4QwDZp4ztLgjkscQPVpr4Ktuw5PoVhRqz
+TbHFEVT/yBRzkQ23hTV3aArufEbizN9LSwQ6wTS/QNx85yH+oGX1qznYXe2zmtxV
+cmJjcS+pUeVg/CbYQcdN4C/9CFije7lDfc9+A2heUhIoHgRku04Jh+ZgzXY38zTW
+p/wdfEBOEz6JtCcmYDsh+pt+7YkiJVboY+qOIxsOOkS1VfjQTz179mtCZhiCbYlV
+CcQJAsXyQOdIdK0V+VqxgtZ07NuXX1vzpxq4RBBo0gkMynEKeE00ID9Q6hepS0Kd
+fYK8D1/qiCQxpqpWkeOXYFdNB/kRrHMR9c5+pZNKBwf8DigshxX9Akx0JWH4/b9B
+1wOB7IYsPKDFuUgovUuJc9WYmp+TPFNiPTwk5cMkw0usibhSfouA2GRp1Fr9brRW
+k+TYNK8VCtj7BJZzoC79adgNYr8u2Z5eZvKCH4IdaoPAzlJC8TURHWJPa1mXQkxI
+dwDBClgy/fddNfdYHxfOhmI/Q3VtZanE8NFL0Z6bB3vjEB7vtv/wY5W/ldwAtHMb
+6V9+NDmxmwb3gGUcFkA+ooovWEuiO1XmUgAcZlyJ9AqUFOD0+5pQ624aHIxLSORe
+sXmK8wDXFwhod/4c6XSGVs9L5P6v2WlfXMAyWcgQ7O1oULNOpxBgAV4AXO0sUFv+
+ZNJYAUQIVHaAzfjswsUUpR0ncnxfjYzxZN7sG1Ed2Ag+al4vdZwv9tCw1Txyi7Bc
+n+jUgxtw81LAO6zWobIAeKZeZrlrGmoIVwg/0O222KUflM4nynl5ISIaAg==
+=0NQ6
+-----END PGP MESSAGE-----
+
+--
+And this is the email signature...
diff --git a/tests/data/pgp/encrypted-message.txt.openpgp-block
b/tests/data/pgp/encrypted-message.txt.openpgp-block
new file mode 100644
index 0000000..fe61c0e
--- /dev/null
+++ b/tests/data/pgp/encrypted-message.txt.openpgp-block
@@ -0,0 +1,17 @@
+-----BEGIN PGP MESSAGE-----
+
+hQIOAwTJ0obO8knpEAgAiSHHrzUzh9J4QwDZp4ztLgjkscQPVpr4Ktuw5PoVhRqz
+TbHFEVT/yBRzkQ23hTV3aArufEbizN9LSwQ6wTS/QNx85yH+oGX1qznYXe2zmtxV
+cmJjcS+pUeVg/CbYQcdN4C/9CFije7lDfc9+A2heUhIoHgRku04Jh+ZgzXY38zTW
+p/wdfEBOEz6JtCcmYDsh+pt+7YkiJVboY+qOIxsOOkS1VfjQTz179mtCZhiCbYlV
+CcQJAsXyQOdIdK0V+VqxgtZ07NuXX1vzpxq4RBBo0gkMynEKeE00ID9Q6hepS0Kd
+fYK8D1/qiCQxpqpWkeOXYFdNB/kRrHMR9c5+pZNKBwf8DigshxX9Akx0JWH4/b9B
+1wOB7IYsPKDFuUgovUuJc9WYmp+TPFNiPTwk5cMkw0usibhSfouA2GRp1Fr9brRW
+k+TYNK8VCtj7BJZzoC79adgNYr8u2Z5eZvKCH4IdaoPAzlJC8TURHWJPa1mXQkxI
+dwDBClgy/fddNfdYHxfOhmI/Q3VtZanE8NFL0Z6bB3vjEB7vtv/wY5W/ldwAtHMb
+6V9+NDmxmwb3gGUcFkA+ooovWEuiO1XmUgAcZlyJ9AqUFOD0+5pQ624aHIxLSORe
+sXmK8wDXFwhod/4c6XSGVs9L5P6v2WlfXMAyWcgQ7O1oULNOpxBgAV4AXO0sUFv+
+ZNJYAUQIVHaAzfjswsUUpR0ncnxfjYzxZN7sG1Ed2Ag+al4vdZwv9tCw1Txyi7Bc
+n+jUgxtw81LAO6zWobIAeKZeZrlrGmoIVwg/0O222KUflM4nynl5ISIaAg==
+=0NQ6
+-----END PGP MESSAGE-----
diff --git a/tests/test-pgp.c b/tests/test-pgp.c
index bc22f28..47e8d29 100644
--- a/tests/test-pgp.c
+++ b/tests/test-pgp.c
@@ -332,8 +332,8 @@ import_key (GMimeCryptoContext *ctx, const char *path)
static void
pump_data_through_filter (GMimeFilter *filter, const char *path, GMimeStream *ostream)
{
+ GMimeStream *onebyte, *filtered, *stream;
GMimeFilter *unix2dos, *dos2unix;
- GMimeStream *filtered, *stream;
filtered = g_mime_stream_filter_new (ostream);
@@ -349,10 +349,13 @@ pump_data_through_filter (GMimeFilter *filter, const char *path, GMimeStream *os
g_mime_stream_filter_add ((GMimeStreamFilter *) filtered, dos2unix);
g_object_unref (dos2unix);
- stream = g_mime_stream_fs_open (path, O_RDONLY, 0644, NULL);
- g_mime_stream_write_to_stream (stream, filtered);
- g_mime_stream_flush (filtered);
+ onebyte = test_stream_onebyte_new (filtered);
g_object_unref (filtered);
+
+ stream = g_mime_stream_fs_open (path, O_RDONLY, 0644, NULL);
+ g_mime_stream_write_to_stream (stream, onebyte);
+ g_mime_stream_flush (onebyte);
+ g_object_unref (onebyte);
g_object_unref (stream);
}
@@ -627,6 +630,20 @@ int main (int argc, char **argv)
testsuite_check_failed ("%s failed: %s", what, ex->message);
} finally;
+ g_mime_filter_reset ((GMimeFilter *) filter);
+
+ what = "GMimeFilterOpenPGP::encrypted message block";
+ testsuite_check ("%s", what);
+ try {
+ key = g_build_filename (datadir, "encrypted-message.txt", NULL);
+ test_openpgp_filter (filter, key, GMIME_OPENPGP_DATA_ENCRYPTED, 165, 1084);
+ g_free (key);
+
+ testsuite_check_passed ();
+ } catch (ex) {
+ testsuite_check_failed ("%s failed: %s", what, ex->message);
+ } finally;
+
g_object_unref (filter);
testsuite_end ();
diff --git a/tests/testsuite.c b/tests/testsuite.c
index 41e0aa6..cfdfae1 100644
--- a/tests/testsuite.c
+++ b/tests/testsuite.c
@@ -502,6 +502,203 @@ testsuite_destroy_gpghome (void)
}
+static void test_stream_onebyte_class_init (TestStreamOneByteClass *klass);
+static void test_stream_onebyte_init (TestStreamOneByte *stream, TestStreamOneByteClass *klass);
+static void test_stream_onebyte_finalize (GObject *object);
+
+static ssize_t stream_read (GMimeStream *stream, char *buf, size_t len);
+static ssize_t stream_write (GMimeStream *stream, const char *buf, size_t len);
+static int stream_flush (GMimeStream *stream);
+static int stream_close (GMimeStream *stream);
+static gboolean stream_eos (GMimeStream *stream);
+static int stream_reset (GMimeStream *stream);
+static gint64 stream_seek (GMimeStream *stream, gint64 offset, GMimeSeekWhence whence);
+static gint64 stream_tell (GMimeStream *stream);
+static gint64 stream_length (GMimeStream *stream);
+static GMimeStream *stream_substream (GMimeStream *stream, gint64 start, gint64 end);
+
+static GMimeStreamClass *parent_class = NULL;
+
+GType
+test_stream_onebyte_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ static const GTypeInfo info = {
+ sizeof (TestStreamOneByteClass),
+ NULL, /* base_class_init */
+ NULL, /* base_class_finalize */
+ (GClassInitFunc) test_stream_onebyte_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (TestStreamOneByte),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) test_stream_onebyte_init,
+ };
+
+ type = g_type_register_static (GMIME_TYPE_STREAM, "TestStreamOneByte", &info, 0);
+ }
+
+ return type;
+}
+
+
+static void
+test_stream_onebyte_class_init (TestStreamOneByteClass *klass)
+{
+ GMimeStreamClass *stream_class = GMIME_STREAM_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_ref (GMIME_TYPE_STREAM);
+
+ object_class->finalize = test_stream_onebyte_finalize;
+
+ stream_class->read = stream_read;
+ stream_class->write = stream_write;
+ stream_class->flush = stream_flush;
+ stream_class->close = stream_close;
+ stream_class->eos = stream_eos;
+ stream_class->reset = stream_reset;
+ stream_class->seek = stream_seek;
+ stream_class->tell = stream_tell;
+ stream_class->length = stream_length;
+ stream_class->substream = stream_substream;
+}
+
+static void
+test_stream_onebyte_init (TestStreamOneByte *stream, TestStreamOneByteClass *klass)
+{
+ stream->source = NULL;
+}
+
+static void
+test_stream_onebyte_finalize (GObject *object)
+{
+ TestStreamOneByte *stream = (TestStreamOneByte *) object;
+
+ if (stream->source)
+ g_object_unref (stream->source);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+static ssize_t
+stream_read (GMimeStream *stream, char *buf, size_t len)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_read (test->source, buf, MIN (len, 1));
+}
+
+static ssize_t
+stream_write (GMimeStream *stream, const char *buf, size_t len)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+ size_t nwritten = 0;
+
+ while (nwritten < len) {
+ if (g_mime_stream_write (test->source, buf + nwritten, 1) > 0)
+ nwritten++;
+ }
+
+ return (ssize_t) nwritten;
+}
+
+static int
+stream_flush (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_flush (test->source);
+}
+
+static int
+stream_close (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_close (test->source);
+}
+
+static gboolean
+stream_eos (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_eos (test->source);
+}
+
+static int
+stream_reset (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_reset (test->source);
+}
+
+static gint64
+stream_seek (GMimeStream *stream, gint64 offset, GMimeSeekWhence whence)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_seek (test->source, offset, whence);
+}
+
+static gint64
+stream_tell (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_tell (test->source);
+}
+
+static gint64
+stream_length (GMimeStream *stream)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_length (test->source);
+}
+
+static GMimeStream *
+stream_substream (GMimeStream *stream, gint64 start, gint64 end)
+{
+ TestStreamOneByte *test = (TestStreamOneByte *) stream;
+
+ return g_mime_stream_substream (test->source, start, end);
+}
+
+
+/**
+ * test_stream_onebyte_new:
+ * @source: source stream
+ *
+ * Creates a new TestStreamOneByte object.
+ *
+ * Returns: a new test stream with source @source.
+ **/
+GMimeStream *
+test_stream_onebyte_new (GMimeStream *source)
+{
+ TestStreamOneByte *test;
+
+ g_return_val_if_fail (GMIME_IS_STREAM (source), NULL);
+
+ test = g_object_new (TEST_TYPE_STREAM_ONEBYTE, NULL);
+
+ test->source = source;
+ g_object_ref (source);
+
+ g_mime_stream_construct ((GMimeStream *) test,
+ source->bound_start,
+ source->bound_end);
+
+ return (GMimeStream *) test;
+}
+
+
#ifdef BUILD
int main (int argc, char **argv)
{
diff --git a/tests/testsuite.h b/tests/testsuite.h
index dad8420..157824f 100644
--- a/tests/testsuite.h
+++ b/tests/testsuite.h
@@ -26,6 +26,8 @@
#include <stdarg.h>
#include <setjmp.h>
+#include <gmime/gmime.h>
+
G_BEGIN_DECLS
void testsuite_init (int argc, char **argv);
@@ -78,6 +80,30 @@ void g_throw (Exception *ex) G_GNUC_NORETURN;
#define throw(e) g_throw (e)
#define finally } if (__env.ex != NULL) exception_free (__env.ex); }
+
+/* A test stream that reads/writes 1 byte at a time */
+#define TEST_TYPE_STREAM_ONEBYTE (test_stream_onebyte_get_type ())
+#define TEST_STREAM_ONEBYTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_STREAM_ONEBYTE,
TestStreamOneByte))
+#define TEST_STREAM_ONEBYTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_STREAM_ONEBYTE,
TestStreamOneByteClass))
+#define TEST_IS_STREAM_ONEBYTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_STREAM_ONEBYTE))
+#define TEST_IS_STREAM_ONEBYTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_STREAM_ONEBYTE))
+#define TEST_STREAM_ONEBYTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_STREAM_ONEBYTE,
TestStreamOneByteClass))
+
+typedef struct _TestStreamOneByte TestStreamOneByte;
+typedef struct _TestStreamOneByteClass TestStreamOneByteClass;
+
+struct _TestStreamOneByte {
+ GMimeStream parent_object;
+ GMimeStream *source;
+};
+
+struct _TestStreamOneByteClass {
+ GMimeStreamClass parent_class;
+};
+
+GType test_stream_onebyte_get_type (void);
+GMimeStream *test_stream_onebyte_new (GMimeStream *source);
+
G_END_DECLS
#endif /* __TEST_SUITE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]