aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2001-10-17 19:17:46 +0000
committerMarcus Brinkmann <[email protected]>2001-10-17 19:17:46 +0000
commitf83651e0a586f462cac19fd981f6579d082ce999 (patch)
tree19110f1a910801d316bf92f332fd87aa2811b158
parent2001-10-17 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-f83651e0a586f462cac19fd981f6579d082ce999.tar.gz
gpgme-f83651e0a586f462cac19fd981f6579d082ce999.zip
2001-10-16 Marcus Brinkmann <[email protected]>
* t-version.c: New file. * t-data.c: Likewise. * t-data-1.txt: Likewise. * t-data-2.txt: Likewise. * Makefile.am (TESTS): Add t-version, t-data.
-rw-r--r--tests/ChangeLog19
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/t-data-1.txt1
-rw-r--r--tests/t-data-2.txt3
-rw-r--r--tests/t-data.c283
-rw-r--r--tests/t-version.c45
6 files changed, 353 insertions, 2 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog
new file mode 100644
index 00000000..b32ea941
--- /dev/null
+++ b/tests/ChangeLog
@@ -0,0 +1,19 @@
+2001-10-16 Marcus Brinkmann <[email protected]>
+
+ * t-version.c: New file.
+ * t-data.c: Likewise.
+ * t-data-1.txt: Likewise.
+ * t-data-2.txt: Likewise.
+ * Makefile.am (TESTS): Add t-version, t-data.
+
+
+ Copyright 2001 g10 Code GmbH
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2d566126..282e0636 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -22,8 +22,8 @@
TESTS_ENVIRONMENT = GNUPGHOME=.
-TESTS = t-encrypt t-sign t-decrypt t-verify t-keylist t-export t-import \
- t-trustlist
+TESTS = t-version t-data t-encrypt t-sign t-decrypt t-verify t-keylist \
+ t-export t-import t-trustlist
EXTRA_DIST = mkdemodirs pubdemo.asc secdemo.asc cipher-1.asc geheim.txt \
diff --git a/tests/t-data-1.txt b/tests/t-data-1.txt
new file mode 100644
index 00000000..16a15f2a
--- /dev/null
+++ b/tests/t-data-1.txt
@@ -0,0 +1 @@
+Just GNU it!
diff --git a/tests/t-data-2.txt b/tests/t-data-2.txt
new file mode 100644
index 00000000..9ae851cb
--- /dev/null
+++ b/tests/t-data-2.txt
@@ -0,0 +1,3 @@
+Just GNU it!
+Just GNU it!
+Just GNU it!
diff --git a/tests/t-data.c b/tests/t-data.c
new file mode 100644
index 00000000..f7d6e4cc
--- /dev/null
+++ b/tests/t-data.c
@@ -0,0 +1,283 @@
+/* t-data - Regression tests for the GpgmeData abstraction.
+ * Copyright (C) 2001 g10 Code GmbH
+ *
+ * This file is part of GPGME.
+ *
+ * GPGME is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GPGME is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "../gpgme/gpgme.h"
+
+#define fail_if_err(a) do { if(a) { \
+ fprintf (stderr, "%s:%d: (%i) GpgmeError " \
+ "%s\n", __FILE__, __LINE__, round, \
+ gpgme_strerror(a)); \
+ exit (1); } \
+ } while(0)
+
+static char *
+make_filename (const char *fname)
+{
+ const char *srcdir = getenv ("srcdir");
+ char *buf;
+
+ if (!srcdir)
+ srcdir = ".";
+ buf = malloc (strlen(srcdir) + strlen(fname) + 2 );
+ if (!buf)
+ {
+ fprintf (stderr, "%s:%d: could not allocate string: %s\n",
+ __FILE__, __LINE__, strerror (errno));
+ exit (1);
+ }
+ strcpy (buf, srcdir);
+ strcat (buf, "/");
+ strcat (buf, fname);
+ return buf;
+}
+
+typedef enum
+ {
+ TEST_INITIALIZER,
+ TEST_INVALID_ARGUMENT,
+ TEST_INOUT_NONE,
+ TEST_INOUT_MEM_NO_COPY,
+ TEST_INOUT_MEM_COPY,
+ TEST_INOUT_MEM_FROM_FILE_COPY,
+ TEST_INOUT_MEM_FROM_INEXISTANT_FILE,
+ TEST_INOUT_MEM_FROM_FILE_NO_COPY,
+ TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME,
+ TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART,
+ TEST_INOUT_MEM_FROM_FILE_PART_BY_FP,
+ TEST_OUT_CB,
+ TEST_END
+ } round_t;
+
+const char *text = "Just GNU it!\n";
+
+int
+read_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
+{
+ static int off = 0;
+ round_t round = *((round_t *) cb_value);
+ int amount = strlen (text) - off;
+
+ if (!buffer && !count && !nread)
+ {
+ /* Rewind requested. */
+ off = 0;
+ return 0;
+ }
+ if (! buffer || !nread)
+ return -1;
+ if (amount <= 0)
+ {
+ /* End of file. */
+ *nread = 0;
+ return -1;
+ }
+ if (amount > count)
+ amount = count;
+ memcpy (buffer, text, amount);
+ off += amount;
+ *nread = amount;
+ return 0;
+}
+
+void
+read_once_test (round_t round, GpgmeData data)
+{
+ GpgmeError err;
+ char buffer[1024];
+ int read;
+
+ err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
+ fail_if_err (err);
+
+ if (read != strlen (text) || strncmp (buffer, text, strlen (text)))
+ {
+ fprintf (stderr, "%s:%d: (%i) gpgme_data_read returned wrong data\n",
+ __FILE__, __LINE__, round);
+ exit (1);
+ }
+
+ err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
+ if (err != GPGME_EOF)
+ {
+ fprintf (stderr, "%s:%d: (%i) gpgme_data_read did not signal EOF\n",
+ __FILE__, __LINE__, round);
+ exit (1);
+ }
+}
+
+void
+read_test (round_t round, GpgmeData data)
+{
+ GpgmeError err;
+ char buffer[1024];
+ int read;
+
+ if (round == TEST_INOUT_NONE)
+ {
+ err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
+ if (!err)
+ {
+ fprintf (stderr, "%s:%d: (%i) gpgme_data_read succeded unexpectedly\n",
+ __FILE__, __LINE__, round);
+ exit (1);
+ }
+ return;
+ }
+
+ read_once_test (round, data);
+ err = gpgme_data_rewind (data);
+ fail_if_err (err);
+ read_once_test (round, data);
+}
+
+int
+main (int argc, char **argv )
+{
+ round_t round = TEST_INITIALIZER;
+ const char *text_filename = make_filename ("t-data-1.txt");
+ const char *longer_text_filename = make_filename ("t-data-2.txt");
+ const char *missing_filename = "this-file-surely-does-not-exist";
+ GpgmeError err = GPGME_No_Error;
+ GpgmeData data;
+
+ while (++round)
+ {
+ switch (round)
+ {
+ case TEST_INVALID_ARGUMENT:
+ err = gpgme_data_new (NULL);
+ if (!err)
+ {
+ fprintf (stderr, "%s:%d: gpgme_data_new on NULL pointer succeeded "
+ "unexpectedly\n", __FILE__, __LINE__);
+ exit (1);
+ }
+ if (gpgme_data_get_type (NULL) != GPGME_DATA_TYPE_NONE)
+ {
+ fprintf (stderr, "%s:%d: gpgme_data_get_type on NULL incorrect\n",
+ __FILE__, __LINE__);
+ exit (1);
+ }
+ continue;
+ case TEST_INOUT_NONE:
+ err = gpgme_data_new (&data);
+ break;
+ case TEST_INOUT_MEM_NO_COPY:
+ err = gpgme_data_new_from_mem (&data, text, strlen (text), 0);
+ break;
+ case TEST_INOUT_MEM_COPY:
+ err = gpgme_data_new_from_mem (&data, text, strlen (text), 1);
+ break;
+ case TEST_INOUT_MEM_FROM_FILE_COPY:
+ err = gpgme_data_new_from_file (&data, text_filename, 1);
+ break;
+ case TEST_INOUT_MEM_FROM_INEXISTANT_FILE:
+ err = gpgme_data_new_from_file (&data, missing_filename, 1);
+ if (!err)
+ {
+ fprintf (stderr, "%s:%d: gpgme_data_new_from_file on inexistant "
+ "file succeeded unexpectedly\n", __FILE__, __LINE__);
+ exit (1);
+ }
+ continue;
+ case TEST_INOUT_MEM_FROM_FILE_NO_COPY:
+ err = gpgme_data_new_from_file (&data, text_filename, 0);
+ /* This is not implemented yet. */
+ if (err == GPGME_Not_Implemented)
+ continue;
+ break;
+ case TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME:
+ err = gpgme_data_new_from_filepart (&data, longer_text_filename, 0,
+ strlen (text), strlen (text));
+ break;
+ case TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART:
+ err = gpgme_data_new_from_filepart (&data, missing_filename, 0,
+ strlen (text), strlen (text));
+ if (!err)
+ {
+ fprintf (stderr, "%s:%d: gpgme_data_new_from_file on inexistant "
+ "file succeeded unexpectedly\n", __FILE__, __LINE__);
+ exit (1);
+ }
+ continue;
+ case TEST_INOUT_MEM_FROM_FILE_PART_BY_FP:
+ {
+ FILE *fp = fopen (longer_text_filename, "rb");
+ if (! fp)
+ {
+ fprintf (stderr, "%s:%d: fopen: %s\n", __FILE__, __LINE__,
+ strerror (errno));
+ exit (1);
+ }
+ err = gpgme_data_new_from_filepart (&data, 0, fp,
+ strlen (text), strlen (text));
+ }
+ break;
+ case TEST_OUT_CB:
+ err = gpgme_data_new_with_read_cb (&data, read_cb, &round);
+ break;
+ case TEST_END:
+ return 0;
+ case TEST_INITIALIZER:
+ /* Shouldn't happen. */
+ fprintf (stderr, "%s:%d: impossible condition\n", __FILE__, __LINE__);
+ exit (1);
+ }
+ fail_if_err (err);
+
+ switch (round)
+ {
+ case TEST_INOUT_NONE:
+ if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_NONE)
+ err = GPGME_Invalid_Type;
+ break;
+ case TEST_INOUT_MEM_NO_COPY:
+ case TEST_INOUT_MEM_COPY:
+ case TEST_INOUT_MEM_FROM_FILE_COPY:
+ case TEST_INOUT_MEM_FROM_FILE_NO_COPY:
+ case TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME:
+ case TEST_INOUT_MEM_FROM_FILE_PART_BY_FP:
+ if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_MEM)
+ err = GPGME_Invalid_Type;
+ break;
+ case TEST_OUT_CB:
+ if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_CB)
+ err = GPGME_Invalid_Type;
+ break;
+ case TEST_INITIALIZER:
+ case TEST_INVALID_ARGUMENT:
+ case TEST_INOUT_MEM_FROM_INEXISTANT_FILE:
+ case TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART:
+ case TEST_END:
+ /* Shouldn't happen. */
+ fprintf (stderr, "%s:%d: impossible condition\n", __FILE__, __LINE__);
+ exit (1);
+ }
+ read_test (round, data);
+
+ gpgme_data_release (data);
+ }
+ return 0;
+}
diff --git a/tests/t-version.c b/tests/t-version.c
new file mode 100644
index 00000000..7d50393a
--- /dev/null
+++ b/tests/t-version.c
@@ -0,0 +1,45 @@
+/* t-version.c - regression test
+ * Copyright (C) 2001 g10 Code GmbH
+ *
+ * This file is part of GPGME.
+ *
+ * GPGME is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GPGME is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "../gpgme/gpgme.h"
+
+static const char version[] = VERSION;
+
+int
+main (int argc, char **argv )
+{
+ const char *null_result;
+ const char *current_result;
+ const char *future_result;
+
+ null_result = gpgme_check_version (NULL);
+ current_result = gpgme_check_version (VERSION);
+ future_result = gpgme_check_version (VERSION ".1");
+
+ return !(null_result
+ && ! strcmp (null_result, VERSION)
+ && current_result
+ && ! strcmp (current_result, VERSION)
+ && ! future_result);
+}