1
1

tests: Introduce functions to change directories

This introduces torture_get_current_working_dir() and
torture_change_dir() to allow changing directories in tests.

Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
Anderson Toshiyuki Sasaki 2018-11-20 14:01:57 +01:00 коммит произвёл Andreas Schneider
родитель 77be4ce905
Коммит 0dd2b375c7
4 изменённых файлов: 142 добавлений и 0 удалений

Просмотреть файл

@ -39,11 +39,13 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#elif (defined _WIN32) || (defined _WIN64)
#include <direct.h>
#include <io.h>
#define read _read
#define open _open
#define write _write
#define close _close
#define chdir _chdir
#endif
#include "torture.h"
@ -842,6 +844,28 @@ end:
return new_file;
}
char *torture_get_current_working_dir(void)
{
char *cwd = NULL;
char *result = NULL;
cwd = (char *)malloc(PATH_MAX + 1);
if (cwd == NULL) {
goto end;
}
result = getcwd(cwd, PATH_MAX);
if (result == NULL) {
SAFE_FREE(cwd);
goto end;
}
end:
return cwd;
}
#else /* _WIN32 */
char *torture_make_temp_dir(const char *template)
@ -1072,8 +1096,44 @@ end:
return path;
}
char *torture_get_current_working_dir(void)
{
char *cwd = NULL;
char *result = NULL;
cwd = (char *)malloc(_MAX_PATH + 1);
if (cwd == NULL) {
goto end;
}
result = _getcwd(cwd, _MAX_PATH);
if (result == NULL) {
SAFE_FREE(cwd);
goto end;
}
end:
return cwd;
}
#endif /* _WIN32 */
int torture_change_dir(char *path)
{
int rc = 0;
if (path == NULL) {
rc = -1;
goto end;
}
rc = chdir(path);
end:
return rc;
}
int torture_libssh_verbosity(void){
return verbosity;
}

Просмотреть файл

@ -128,4 +128,7 @@ int torture_run_tests(void);
char *torture_make_temp_dir(const char *template);
char *torture_create_temp_file(const char *template);
char *torture_get_current_working_dir(void);
int torture_change_dir(char *path);
#endif /* _TORTURE_H */

Просмотреть файл

@ -18,6 +18,7 @@ set(LIBSSH_UNIT_TESTS
torture_packet_filter
torture_temp_dir
torture_temp_file
torture_push_pop_dir
)
set(LIBSSH_THREAD_UNIT_TESTS

78
tests/unittests/torture_push_pop_dir.c Обычный файл
Просмотреть файл

@ -0,0 +1,78 @@
#include "config.h"
#include "torture.h"
#define LIBSSH_STATIC
const char template[] = "temp_dir_XXXXXX";
static int setup(void **state)
{
char *temp_dir = NULL;
temp_dir = torture_make_temp_dir(template);
assert_non_null(temp_dir);
*state = (void *)temp_dir;
return 0;
}
static int teardown(void **state)
{
char *temp_dir = *((char **)state);
torture_rmdirs((const char *)temp_dir);
free(temp_dir);
return 0;
}
static void torture_back_and_forth(void **state)
{
char *temp_dir = *((char **)state);
char *cwd = NULL;
char *after_change = NULL;
char *after_changing_back = NULL;
int rc = 0;
cwd = torture_get_current_working_dir();
assert_non_null(cwd);
printf("Current dir: %s\n", cwd);
rc = torture_change_dir(temp_dir);
assert_int_equal(rc, 0);
after_change = torture_get_current_working_dir();
assert_non_null(after_change);
printf("Current dir after change: %s\n", after_change);
rc = torture_change_dir(cwd);
assert_int_equal(rc, 0);
after_changing_back = torture_get_current_working_dir();
assert_non_null(after_changing_back);
printf("Back to dir: %s\n", after_changing_back);
SAFE_FREE(cwd);
SAFE_FREE(after_change);
SAFE_FREE(after_changing_back);
}
int torture_run_tests(void)
{
int rc;
struct CMUnitTest tests[] = {
cmocka_unit_test_setup_teardown(torture_back_and_forth,
setup, teardown),
};
torture_filter_tests(tests);
rc = cmocka_run_group_tests(tests, NULL, NULL);
return rc;
}