|
Packit |
aea12f |
/*
|
|
Packit |
aea12f |
* Copyright (C) 2004-2016 Free Software Foundation, Inc.
|
|
Packit |
aea12f |
* Copyright (C) 2016 Red Hat, Inc.
|
|
Packit |
aea12f |
*
|
|
Packit |
aea12f |
* Author: Simon Josefsson, Nikos Mavrogiannopoulos
|
|
Packit |
aea12f |
*
|
|
Packit |
aea12f |
* This file is part of GnuTLS.
|
|
Packit |
aea12f |
*
|
|
Packit |
aea12f |
* GnuTLS is free software; you can redistribute it and/or modify it
|
|
Packit |
aea12f |
* under the terms of the GNU General Public License as published by
|
|
Packit |
aea12f |
* the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
aea12f |
* (at your option) any later version.
|
|
Packit |
aea12f |
*
|
|
Packit |
aea12f |
* GnuTLS is distributed in the hope that it will be useful, but
|
|
Packit |
aea12f |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
aea12f |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
aea12f |
* General Public License for more details.
|
|
Packit |
aea12f |
*
|
|
Packit |
aea12f |
* You should have received a copy of the GNU Lesser General Public License
|
|
Packit |
aea12f |
* along with this program. If not, see <https://www.gnu.org/licenses/>
|
|
Packit |
aea12f |
*/
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#ifndef GNUTLS_TESTS_UTILS_H
|
|
Packit |
aea12f |
#define GNUTLS_TESTS_UTILS_H
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#include <stdio.h>
|
|
Packit |
aea12f |
#include <stdlib.h>
|
|
Packit |
aea12f |
#include <signal.h>
|
|
Packit |
aea12f |
#include <string.h>
|
|
Packit |
aea12f |
#include <stdarg.h>
|
|
Packit |
aea12f |
#include <gnutls/gnutls.h>
|
|
Packit |
aea12f |
#include <gnutls/pkcs11.h>
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#ifndef __attribute__
|
|
Packit |
aea12f |
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
|
Packit |
aea12f |
#define __attribute__(Spec) /* empty */
|
|
Packit |
aea12f |
#endif
|
|
Packit |
aea12f |
#endif
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#ifdef NDEBUG
|
|
Packit |
aea12f |
# error tests cannot be compiled with NDEBUG defined
|
|
Packit |
aea12f |
#endif
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#ifndef FALLTHROUGH
|
|
Packit Service |
991b93 |
#if _GNUTLS_GCC_VERSION >= 70100
|
|
Packit Service |
991b93 |
# define FALLTHROUGH __attribute__ ((fallthrough))
|
|
Packit Service |
991b93 |
#else
|
|
Packit |
aea12f |
# define FALLTHROUGH
|
|
Packit |
aea12f |
#endif
|
|
Packit Service |
991b93 |
#endif
|
|
Packit Service |
991b93 |
|
|
Packit Service |
991b93 |
/* number of elements within an array */
|
|
Packit Service |
991b93 |
#define countof(a) (sizeof(a)/sizeof(*(a)))
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
inline static int global_init(void)
|
|
Packit |
aea12f |
{
|
|
Packit |
aea12f |
#ifdef ENABLE_PKCS11
|
|
Packit |
aea12f |
gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL);
|
|
Packit |
aea12f |
#endif
|
|
Packit |
aea12f |
return gnutls_global_init();
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
extern int debug;
|
|
Packit |
aea12f |
extern int error_count;
|
|
Packit |
aea12f |
extern int break_on_error;
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
extern const char *pkcs3;
|
|
Packit |
aea12f |
extern const char *pkcs3_2048;
|
|
Packit |
aea12f |
extern const char *pkcs3_3072;
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#define fail(format, ...) \
|
|
Packit |
aea12f |
_fail("%s:%d: "format, __func__, __LINE__, ##__VA_ARGS__)
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
extern void _fail(const char *format, ...)
|
|
Packit |
aea12f |
__attribute__ ((format(printf, 1, 2)));
|
|
Packit |
aea12f |
extern void fail_ignore(const char *format, ...)
|
|
Packit |
aea12f |
__attribute__ ((format(printf, 1, 2)));
|
|
Packit |
aea12f |
extern void success(const char *format, ...)
|
|
Packit |
aea12f |
__attribute__ ((format(printf, 1, 2)));
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
/* assumes test_name is defined */
|
|
Packit |
aea12f |
#define test_fail(fmt, ...) \
|
|
Packit |
aea12f |
fail("%s: "fmt, test_name, ##__VA_ARGS__)
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#define test_success(fmt, ...) \
|
|
Packit |
aea12f |
success("%s: "fmt, test_name, ##__VA_ARGS__)
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
extern void c_print(const unsigned char *str, size_t len);
|
|
Packit |
aea12f |
extern void escapeprint(const char *str, size_t len);
|
|
Packit |
aea12f |
extern void hexprint(const void *str, size_t len);
|
|
Packit |
aea12f |
extern void binprint(const void *str, size_t len);
|
|
Packit |
aea12f |
int disable_system_calls(void);
|
|
Packit |
aea12f |
void sec_sleep(int sec);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
int
|
|
Packit |
aea12f |
test_cli_serv_anon(gnutls_anon_server_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_anon_client_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *prio);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
int
|
|
Packit |
aea12f |
test_cli_serv_psk(gnutls_psk_server_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_psk_client_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *prio);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
typedef void callback_func(gnutls_session_t, void *priv);
|
|
Packit |
aea12f |
void test_cli_serv(gnutls_certificate_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_certificate_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *prio, const char *host,
|
|
Packit |
aea12f |
void *priv,
|
|
Packit |
aea12f |
callback_func * client_cb, callback_func * server_cb);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
int
|
|
Packit |
aea12f |
_test_cli_serv(gnutls_certificate_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_certificate_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *serv_prio, const char *cli_prio,
|
|
Packit |
aea12f |
const char *host,
|
|
Packit |
aea12f |
void *priv, callback_func *client_cb, callback_func *server_cb,
|
|
Packit |
aea12f |
unsigned expect_verification_failure,
|
|
Packit |
aea12f |
unsigned require_cert,
|
|
Packit |
aea12f |
int serv_err,
|
|
Packit |
aea12f |
int cli_err);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
void print_dh_params_info(gnutls_session_t);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
void
|
|
Packit |
aea12f |
test_cli_serv_cert(gnutls_certificate_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_certificate_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *serv_prio, const char *cli_prio, const char *host);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
void
|
|
Packit |
aea12f |
test_cli_serv_expect(gnutls_certificate_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_certificate_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *serv_prio, const char *cli_prio, const char *host,
|
|
Packit |
aea12f |
int serv_err, int cli_err);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
/* verification failed */
|
|
Packit |
aea12f |
unsigned
|
|
Packit |
aea12f |
test_cli_serv_vf(gnutls_certificate_credentials_t server_cred,
|
|
Packit |
aea12f |
gnutls_certificate_credentials_t client_cred,
|
|
Packit |
aea12f |
const char *prio, const char *host);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#define TMPNAME_SIZE 128
|
|
Packit |
aea12f |
char *get_tmpname(char s[TMPNAME_SIZE]);
|
|
Packit |
aea12f |
void track_temp_files(void);
|
|
Packit |
aea12f |
void delete_temp_files(void);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
/* This must be implemented elsewhere. */
|
|
Packit |
aea12f |
extern void doit(void);
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
/* calls fail() if status indicates an error */
|
|
Packit |
aea12f |
inline static void _check_wait_status(int status, unsigned sigonly)
|
|
Packit |
aea12f |
{
|
|
Packit |
aea12f |
#if defined WEXITSTATUS && defined WIFSIGNALED
|
|
Packit |
aea12f |
if (WEXITSTATUS(status) != 0 ||
|
|
Packit |
aea12f |
(WIFSIGNALED(status) && WTERMSIG(status) != SIGTERM)) {
|
|
Packit |
aea12f |
if (WIFSIGNALED(status)) {
|
|
Packit |
aea12f |
fail("Child died with signal %d\n", WTERMSIG(status));
|
|
Packit |
aea12f |
} else {
|
|
Packit |
aea12f |
if (!sigonly) {
|
|
Packit |
aea12f |
if (WEXITSTATUS(status) == 77)
|
|
Packit |
aea12f |
exit(77);
|
|
Packit |
aea12f |
fail("Child died with status %d\n",
|
|
Packit |
aea12f |
WEXITSTATUS(status));
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
#endif
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
inline static void check_wait_status(int status)
|
|
Packit |
aea12f |
{
|
|
Packit |
aea12f |
_check_wait_status(status, 0);
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
inline static void check_wait_status_for_sig(int status)
|
|
Packit |
aea12f |
{
|
|
Packit |
aea12f |
_check_wait_status(status, 1);
|
|
Packit |
aea12f |
}
|
|
Packit |
aea12f |
|
|
Packit |
aea12f |
#endif /* GNUTLS_TESTS_UTILS_H */
|