diff options
| author | Marcus Brinkmann <[email protected]> | 2001-10-17 19:17:46 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2001-10-17 19:17:46 +0000 | 
| commit | f83651e0a586f462cac19fd981f6579d082ce999 (patch) | |
| tree | 19110f1a910801d316bf92f332fd87aa2811b158 | |
| parent | 2001-10-17 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-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.
Diffstat (limited to '')
| -rw-r--r-- | tests/ChangeLog | 19 | ||||
| -rw-r--r-- | tests/Makefile.am | 4 | ||||
| -rw-r--r-- | tests/t-data-1.txt | 1 | ||||
| -rw-r--r-- | tests/t-data-2.txt | 3 | ||||
| -rw-r--r-- | tests/t-data.c | 283 | ||||
| -rw-r--r-- | tests/t-version.c | 45 | 
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); +} | 
