2001-10-16 Marcus Brinkmann <marcus@g10code.de>

* 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.
This commit is contained in:
Marcus Brinkmann 2001-10-17 19:17:46 +00:00
parent 96a64f6b80
commit f83651e0a5
6 changed files with 353 additions and 2 deletions

19
tests/ChangeLog Normal file
View File

@ -0,0 +1,19 @@
2001-10-16 Marcus Brinkmann <marcus@g10code.de>
* 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.

View File

@ -22,8 +22,8 @@
TESTS_ENVIRONMENT = GNUPGHOME=. TESTS_ENVIRONMENT = GNUPGHOME=.
TESTS = t-encrypt t-sign t-decrypt t-verify t-keylist t-export t-import \ TESTS = t-version t-data t-encrypt t-sign t-decrypt t-verify t-keylist \
t-trustlist t-export t-import t-trustlist
EXTRA_DIST = mkdemodirs pubdemo.asc secdemo.asc cipher-1.asc geheim.txt \ EXTRA_DIST = mkdemodirs pubdemo.asc secdemo.asc cipher-1.asc geheim.txt \

1
tests/t-data-1.txt Normal file
View File

@ -0,0 +1 @@
Just GNU it!

3
tests/t-data-2.txt Normal file
View File

@ -0,0 +1,3 @@
Just GNU it!
Just GNU it!
Just GNU it!

283
tests/t-data.c Normal file
View File

@ -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;
}

45
tests/t-version.c Normal file
View File

@ -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);
}