Skip to content

Commit

Permalink
Allow unit tests to fall back to hard coded location
Browse files Browse the repository at this point in the history
Settings the environment variable required for running unit tests is
tiresome in my IDE (Clion). So allow unit tests to fall back to a hard
coded location in case the environment variable is not set.

Change-Id: Ide72b81f497088dd0fd2cdcfff83cbce5b48f145
Acked-by: Frank Lichtenheld <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg28161.html
Signed-off-by: Gert Doering <[email protected]>
  • Loading branch information
schwabe authored and cron2 committed Feb 1, 2024
1 parent e1f8c59 commit bb0849d
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -682,6 +682,10 @@ if (BUILD_TESTING)

target_include_directories(${test_name} PRIVATE src/openvpn)

# for compat with IDEs like Clion that ignore the tests properties
# for the environment variable srcdir when running tests as fallback
target_compile_definitions(${test_name} PRIVATE "-DUNIT_TEST_SOURCEDIR=\"${CMAKE_SOURCE_DIR}/tests/unit_tests/openvpn\"")

if (NOT ${test_name} STREQUAL "test_buffer")
target_sources(${test_name} PRIVATE
src/openvpn/buffer.c
Expand Down
29 changes: 28 additions & 1 deletion tests/unit_tests/openvpn/test_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,36 @@
* This has a openvpn prefix to avoid confusion with cmocka's unit_test_setup_*
* methods
*/
void
static inline void
openvpn_unit_test_setup()
{
assert_int_equal(setvbuf(stdout, NULL, _IONBF, BUFSIZ), 0);
assert_int_equal(setvbuf(stderr, NULL, _IONBF, BUFSIZ), 0);
}

/**
* Helper function to get a file path from the unit test directory to open it
* or pass its path to another function. This function will first look for
* an environment variable or if failing that, will fall back to a hardcoded
* value from compile time if compiled with CMake.
*
* @param buf buffer holding the path to the file
* @param bufsize size of buf
* @param filename name of the filename to retrieve relative to the
* unit test source directory
*/
void
openvpn_test_get_srcdir_dir(char *buf, size_t bufsize, const char *filename)
{
const char *srcdir = getenv("srcdir");

#if defined(UNIT_TEST_SOURCEDIR)
if (!srcdir)
{
srcdir = UNIT_TEST_SOURCEDIR;
}
#endif
assert_non_null(srcdir);

snprintf(buf, bufsize, "%s/%s", srcdir, filename);
}
10 changes: 5 additions & 5 deletions tests/unit_tests/openvpn/test_user_pass.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <string.h>
#include <setjmp.h>
#include <cmocka.h>
#include "test_common.h"

#include "misc.c"

Expand Down Expand Up @@ -232,11 +233,9 @@ test_get_user_pass_authfile_file(void **state)
reset_user_pass(&up);
unsigned int flags = 0;

const char *srcdir = getenv("srcdir");
assert_non_null(srcdir);
char authfile[PATH_MAX] = { 0 };
openvpn_test_get_srcdir_dir(authfile, PATH_MAX, "input/user_pass.txt" );

snprintf(authfile, PATH_MAX, "%s/%s", srcdir, "input/user_pass.txt");
/*FIXME: query_user_exec() called even though nothing queued */
will_return(query_user_exec_builtin, true);
assert_true(get_user_pass_cr(&up, authfile, "UT", flags, NULL));
Expand All @@ -246,7 +245,7 @@ test_get_user_pass_authfile_file(void **state)

reset_user_pass(&up);

snprintf(authfile, PATH_MAX, "%s/%s", srcdir, "input/user_only.txt");
openvpn_test_get_srcdir_dir(authfile, PATH_MAX, "input/user_only.txt");
expect_string(query_user_exec_builtin, query_user[i].prompt, "Enter UT Password:");
will_return(query_user_exec_builtin, "cpassword");
will_return(query_user_exec_builtin, true);
Expand All @@ -259,7 +258,7 @@ test_get_user_pass_authfile_file(void **state)
reset_user_pass(&up);

flags |= GET_USER_PASS_PASSWORD_ONLY;
snprintf(authfile, PATH_MAX, "%s/%s", srcdir, "input/user_only.txt");
openvpn_test_get_srcdir_dir(authfile, PATH_MAX, "input/user_only.txt");
/*FIXME: query_user_exec() called even though nothing queued */
will_return(query_user_exec_builtin, true);
assert_true(get_user_pass_cr(&up, authfile, "UT", flags, NULL));
Expand All @@ -279,5 +278,6 @@ const struct CMUnitTest user_pass_tests[] = {
int
main(void)
{
openvpn_unit_test_setup();
return cmocka_run_group_tests(user_pass_tests, NULL, NULL);
}

0 comments on commit bb0849d

Please sign in to comment.