@@ -12,6 +12,7 @@
#include "argv.h"
#include "buffer.h"
+#include "test_common.h"
/* Defines for use in the tests and the mock parse_line() */
#define PATH1 "/s p a c e"
@@ -252,6 +253,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test(argv_printf__multiple_spaces_in_format__parsed_as_one),
cmocka_unit_test(argv_printf_cat__multiple_spaces_in_format__parsed_as_one),
@@ -35,6 +35,7 @@
#include <cmocka.h>
#include "auth_token.c"
+#include "test_common.h"
struct test_context {
struct tls_multi multi;
@@ -407,6 +408,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(auth_token_basic_test, setup, teardown),
cmocka_unit_test_setup_teardown(auth_token_fail_invalid_key, setup, teardown),
@@ -32,6 +32,7 @@
#include "buffer.h"
#include "buffer.c"
+#include "test_common.h"
static void
test_buffer_strprefix(void **state)
@@ -356,6 +357,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_buffer_strprefix),
cmocka_unit_test(test_buffer_printf_catrunc),
new file mode 100644
@@ -0,0 +1,40 @@
+/*
+ * OpenVPN -- An application to securely tunnel IP networks
+ * over a single UDP port, with support for SSL/TLS-based
+ * session authentication and key exchange,
+ * packet encryption, packet authentication, and
+ * packet compression.
+ *
+ * Copyright (C) 2016-2021 Fox Crypto B.V. <openvpn@foxcrypto.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <stdio.h>
+#include <cmocka.h>
+#include <setjmp.h>
+
+/**
+ * Sets up the environment for unit tests like making both stderr and stdout
+ * non-buffered to avoid messages getting lost if the program exits early.
+ *
+ * This has a openvpn prefix to avoid confusion with cmocka's unit_test_setup_*
+ * methods
+ */
+void
+openvpn_unit_test_setup()
+{
+ assert_int_equal(setvbuf(stdout, NULL, _IONBF, BUFSIZ), 0);
+ assert_int_equal(setvbuf(stderr, NULL, _IONBF, BUFSIZ), 0);
+}
@@ -39,6 +39,7 @@
#include "ssl_backend.h"
#include "mss.h"
+#include "test_common.h"
static const char testtext[] = "Dummy text to test PEM encoding";
@@ -445,6 +446,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test(crypto_pem_encode_decode_loopback),
cmocka_unit_test(crypto_translate_cipher_names),
@@ -40,6 +40,7 @@
#include <openssl/core_names.h>
#include <openssl/evp.h>
#include <openssl/pkcs12.h>
+#include "test_common.h"
#include <cryptoapi.h>
#include <cryptoapi.c> /* pull-in the whole file to test static functions */
@@ -486,6 +487,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_parse_hexstring),
cmocka_unit_test(import_certs),
@@ -36,6 +36,7 @@
#include "ssl_util.h"
#include "options_util.h"
+#include "test_common.h"
static void
test_compat_lzo_string(void **state)
@@ -117,5 +118,6 @@
int
main(void)
{
+ openvpn_unit_test_setup();
return cmocka_run_group_tests(misc_tests, NULL, NULL);
}
@@ -35,6 +35,7 @@
#include <cmocka.h>
#include "ssl_ncp.c"
+#include "test_common.h"
/* Defines for use in the tests and the mock parse_line() */
@@ -272,6 +273,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
#if defined(ENABLE_CRYPTO_OPENSSL)
OpenSSL_add_all_algorithms();
#endif
@@ -35,6 +35,7 @@
#include "packet_id.h"
#include "reliable.h"
+#include "test_common.h"
struct test_packet_id_write_data {
struct {
@@ -273,6 +274,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(test_packet_id_write_short,
test_packet_id_write_setup,
@@ -37,11 +37,13 @@
#include <setjmp.h>
#include <cmocka.h>
+#include "test_common.h"
#define token_name "Test Token"
#define PIN "12345"
#define HASHSIZE 20
+
struct management *management; /* global */
/* replacement for crypto_print_openssl_errors() */
@@ -459,6 +461,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(test_pkcs11_ids, setup_pkcs11,
teardown_pkcs11),
@@ -33,6 +33,7 @@
#include <string.h>
#include <setjmp.h>
#include <cmocka.h>
+#include "test_common.h"
#include "crypto.h"
#include "options.h"
@@ -628,6 +629,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_tls_decrypt_lite_none),
cmocka_unit_test(test_tls_decrypt_lite_auth),
@@ -40,6 +40,8 @@
#include <openssl/core_names.h>
#include <openssl/evp.h>
+#include "test_common.h"
+
struct management *management; /* global */
static int mgmt_callback_called;
@@ -119,6 +121,7 @@
static void
init_test()
{
+ openvpn_unit_test_setup();
prov[0] = OSSL_PROVIDER_load(NULL, "default");
OSSL_PROVIDER_add_builtin(NULL, prov_name, xkey_provider_init);
prov[1] = OSSL_PROVIDER_load(NULL, prov_name);
@@ -43,6 +43,7 @@
#include "mss.h"
#include "ssl_verify_backend.h"
#include "win32.h"
+#include "test_common.h"
/* Mock function to be allowed to include win32.c which is required for
* getting the temp directory */
@@ -122,6 +123,8 @@
int
main(void)
{
+ openvpn_unit_test_setup();
+
const struct CMUnitTest tests[] = {
cmocka_unit_test(crypto_pem_encode_certificate)
};
@@ -34,6 +34,7 @@
#include <setjmp.h>
#include <cmocka.h>
+#include "test_common.h"
#include "tls_crypt.c"
/* Define this function here as dummy since including the ssl_*.c files
@@ -673,6 +674,7 @@
int
main(void)
{
+ openvpn_unit_test_setup();
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(tls_crypt_loopback,
test_tls_crypt_setup,