Changeset View
Changeset View
Standalone View
Standalone View
tests/t-reader.c
- This file was added.
| /* t-reader.c - basic tests for the reader object | |||||
werner: s/t-dnparser.c/t-reader.c/ | |||||
| * Copyright (C) 2017 g10 Code GmbH | |||||
| * | |||||
| * This file is part of KSBA. | |||||
| * | |||||
| * KSBA 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 3 of the License, or | |||||
| * (at your option) any later version. | |||||
| * | |||||
| * KSBA 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, see <http://www.gnu.org/licenses/>. | |||||
| */ | |||||
| #include <stdio.h> | |||||
| #include <stdlib.h> | |||||
| #include <string.h> | |||||
| #include <assert.h> | |||||
| #include <time.h> | |||||
| #include <errno.h> | |||||
| #include <unistd.h> | |||||
Done Inline ActionsYou can't include this unconditionally. werner: You can't include this unconditionally. | |||||
| #include <sys/types.h> | |||||
| #include <sys/stat.h> | |||||
| #include <fcntl.h> | |||||
| #include <gpg-error.h> | |||||
| #include "../src/ksba.h" | |||||
| #include "t-common.h" | |||||
| void | |||||
| test_fd(const char* path) | |||||
| { | |||||
| int fd = open (path, O_RDONLY); | |||||
| gpg_error_t err = 0; | |||||
| ksba_reader_t reader; | |||||
| ksba_cert_t cert; | |||||
| if (fd < 0) | |||||
| { | |||||
| perror ("open() failed"); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_reader_new (&reader))) | |||||
| { | |||||
| fprintf (stderr, "ksba_reader_new() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_reader_set_fd (reader, fd))) | |||||
| { | |||||
| fprintf (stderr, "ksba_reader_set_fd() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_new (&cert))) | |||||
| { | |||||
| fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_read_der (cert, reader))) | |||||
| { | |||||
| fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| ksba_cert_release (cert); | |||||
| ksba_reader_release (reader); | |||||
| close (fd); | |||||
| } | |||||
| void | |||||
| test_file(const char* path) | |||||
| { | |||||
| FILE* fp = fopen (path, "r"); | |||||
| gpg_error_t err = 0; | |||||
Done Inline ActionsPleade don't use "fd" for FILE object. "fp" or "stream" are commonly used names. werner: Pleade don't use "fd" for FILE object. "fp" or "stream" are commonly used names. | |||||
| ksba_reader_t reader; | |||||
| ksba_cert_t cert; | |||||
| if (!fp) | |||||
| { | |||||
| perror ("fopen() failed"); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_reader_new (&reader))) | |||||
| { | |||||
| fprintf (stderr, "ksba_reader_new() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_reader_set_file (reader, fp))) | |||||
| { | |||||
| fprintf (stderr, "ksba_reader_set_fd() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_new (&cert))) | |||||
| { | |||||
| fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_read_der (cert, reader))) | |||||
| { | |||||
| fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| ksba_cert_release (cert); | |||||
| ksba_reader_release (reader); | |||||
| fclose (fp); | |||||
| } | |||||
| void | |||||
| test_mem(const char* path) | |||||
| { | |||||
| int fd = open (path, O_RDONLY); | |||||
| gpg_error_t err = 0; | |||||
| ksba_reader_t reader; | |||||
| ksba_cert_t cert; | |||||
| char *mem = NULL; | |||||
| ssize_t ret = 0; | |||||
| size_t p = 0; | |||||
| struct stat st; | |||||
| if (fd < 0) | |||||
| { | |||||
| perror ("fopen() failed"); | |||||
| exit (1); | |||||
| } | |||||
| if (fstat (fd, &st)) | |||||
| { | |||||
| fprintf (stderr, "fstat() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| mem = xmalloc(st.st_size); | |||||
| while (p < st.st_size && (ret = read(fd, mem + p, st.st_size - p))) | |||||
| { | |||||
| if (ret < 0) | |||||
| { | |||||
| fprintf (stderr, "read() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| p += ret; | |||||
| } | |||||
| if ((err = ksba_reader_new (&reader))) | |||||
| { | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_reader_set_mem (reader, mem, st.st_size))) | |||||
| { | |||||
| fprintf (stderr, "ksba_reader_set_mem() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_new (&cert))) | |||||
| { | |||||
| fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| if ((err = ksba_cert_read_der (cert, reader))) | |||||
| { | |||||
| fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); | |||||
| exit (1); | |||||
| } | |||||
| ksba_cert_release (cert); | |||||
| ksba_reader_release (reader); | |||||
| xfree (mem); | |||||
| close (fd); | |||||
| } | |||||
Done Inline ActionsThis doesn't work with out-of-source-tree builds. You need to prepend getenv("srcdir"), cf. https://dev.gnupg.org/source/libassuan/browse/master/tests/common.h;859f9a9754708572a6289853d7d95b9ee3eae589$197 marcus: This doesn't work with out-of-source-tree builds. You need to prepend getenv("srcdir"), cf. | |||||
| int | |||||
| main (int argc, char **argv) | |||||
| { | |||||
| if (argc == 1) | |||||
| { | |||||
| test_fd (prepend_srcdir ("cert_g10code_test1.der")); | |||||
| test_file (prepend_srcdir ("cert_g10code_test1.der")); | |||||
| test_mem (prepend_srcdir ("cert_g10code_test1.der")); | |||||
| } | |||||
| else | |||||
| { | |||||
| for (int i = 1; i < argc; ++i) | |||||
| { | |||||
| test_fd (argv[i]); | |||||
| test_file (argv[i]); | |||||
| test_mem (argv[i]); | |||||
| } | |||||
| } | |||||
| return 0; | |||||
| } | |||||
s/t-dnparser.c/t-reader.c/