mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 23:46:15 +01:00
gtestutils: Use $G_TEST_TMPDIR as temporary directory when defined
During tests in which we are isolating directories, we may still create temporary files in the global temporary directory without cleaning them because the value returned by g_get_tmp_dir() is cached when we isolate the tests directory to the global TMPDIR. To ensure that we're always isolating the temporary directories, let's unset the cached temporary directory once we've defined $G_TEST_TMPDIR so that the returned value of g_get_tmpdir() can be recomputed using the test isolated temporary directory.
This commit is contained in:
parent
f520066563
commit
ca0f04d1c6
@ -1690,6 +1690,7 @@ void
|
||||
(*argv)[0], "G_TEST_TMPDIR");
|
||||
exit (1);
|
||||
}
|
||||
_g_unset_cached_tmp_dir ();
|
||||
|
||||
/* And clear the traditional environment variables so subprocesses
|
||||
* spawned by the code under test can’t trash anything. If a test
|
||||
|
@ -1205,6 +1205,7 @@ test_dir_make_tmp (void)
|
||||
name = g_dir_make_tmp ("testXXXXXXtest", &error);
|
||||
g_assert_no_error (error);
|
||||
g_assert_true (g_file_test (name, G_FILE_TEST_IS_DIR));
|
||||
g_assert_true (g_str_has_prefix (name, g_getenv ("G_TEST_TMPDIR")));
|
||||
ret = g_rmdir (name);
|
||||
g_assert_cmpint (ret, ==, 0);
|
||||
g_free (name);
|
||||
@ -1212,6 +1213,7 @@ test_dir_make_tmp (void)
|
||||
name = g_dir_make_tmp (NULL, &error);
|
||||
g_assert_no_error (error);
|
||||
g_assert_true (g_file_test (name, G_FILE_TEST_IS_DIR));
|
||||
g_assert_true (g_str_has_prefix (name, g_getenv ("G_TEST_TMPDIR")));
|
||||
ret = g_rmdir (name);
|
||||
g_assert_cmpint (ret, ==, 0);
|
||||
g_free (name);
|
||||
@ -1238,6 +1240,7 @@ test_file_open_tmp (void)
|
||||
g_assert_cmpint (fd, !=, -1);
|
||||
g_assert_no_error (error);
|
||||
g_assert_nonnull (name);
|
||||
g_assert_true (g_str_has_prefix (name, g_getenv ("G_TEST_TMPDIR")));
|
||||
unlink (name);
|
||||
g_free (name);
|
||||
close (fd);
|
||||
@ -1246,6 +1249,7 @@ test_file_open_tmp (void)
|
||||
g_assert_cmpint (fd, !=, -1);
|
||||
g_assert_no_error (error);
|
||||
g_assert_nonnull (name);
|
||||
g_assert_true (g_str_has_prefix (name, g_getenv ("G_TEST_TMPDIR")));
|
||||
g_unlink (name);
|
||||
g_free (name);
|
||||
close (fd);
|
||||
|
@ -158,6 +158,7 @@ glib_tests = {
|
||||
'utils' : {
|
||||
'c_standards': c_standards.keys(),
|
||||
},
|
||||
'utils-isolated' : {},
|
||||
'unicode' : {},
|
||||
'unicode-encoding' : {},
|
||||
'unicode-normalize': {},
|
||||
|
114
glib/tests/utils-isolated.c
Normal file
114
glib/tests/utils-isolated.c
Normal file
@ -0,0 +1,114 @@
|
||||
/* Copyright (C) 2022 Marco Trevisan
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General
|
||||
* Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Marco Trevisan <marco.trevisan@canonical.com>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib/glib.h>
|
||||
|
||||
/* Test that all of the well-known directories returned by GLib
|
||||
* are returned as children of test_tmpdir when running with
|
||||
* %G_TEST_OPTION_ISOLATE_DIRS. This ensures that tests should
|
||||
* not interfere with each other in `/tmp` while running.
|
||||
*/
|
||||
|
||||
const char *test_tmpdir;
|
||||
|
||||
static void
|
||||
test_tmp_dir (void)
|
||||
{
|
||||
g_assert_cmpstr (g_get_tmp_dir (), ==, test_tmpdir);
|
||||
}
|
||||
|
||||
static void
|
||||
test_home_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_home_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_user_cache_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_user_cache_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_system_config_dirs (void)
|
||||
{
|
||||
const char *const *dir;
|
||||
|
||||
for (dir = g_get_system_config_dirs (); *dir != NULL; dir++)
|
||||
g_assert_true (g_str_has_prefix (*dir, test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_user_config_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_user_config_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_system_data_dirs (void)
|
||||
{
|
||||
const char *const *dir;
|
||||
|
||||
for (dir = g_get_system_data_dirs (); *dir != NULL; dir++)
|
||||
g_assert_true (g_str_has_prefix (*dir, test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_user_data_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_user_data_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_user_state_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_user_state_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
static void
|
||||
test_user_runtime_dir (void)
|
||||
{
|
||||
g_assert_true (g_str_has_prefix (g_get_user_runtime_dir (), test_tmpdir));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc,
|
||||
char *argv[])
|
||||
{
|
||||
g_setenv ("LC_ALL", "C", TRUE);
|
||||
g_test_init (&argc, &argv, G_TEST_OPTION_ISOLATE_DIRS, NULL);
|
||||
|
||||
test_tmpdir = g_getenv ("G_TEST_TMPDIR");
|
||||
g_assert_nonnull (test_tmpdir);
|
||||
|
||||
g_test_add_func ("/utils-isolated/tmp-dir", test_tmp_dir);
|
||||
g_test_add_func ("/utils-isolated/home-dir", test_home_dir);
|
||||
g_test_add_func ("/utils-isolated/user-cache-dir", test_user_cache_dir);
|
||||
g_test_add_func ("/utils-isolated/system-config-dirs", test_system_config_dirs);
|
||||
g_test_add_func ("/utils-isolated/user-config-dir", test_user_config_dir);
|
||||
g_test_add_func ("/utils-isolated/system-data-dirs", test_system_data_dirs);
|
||||
g_test_add_func ("/utils-isolated/user-data-dir", test_user_data_dir);
|
||||
g_test_add_func ("/utils-isolated/user-state-dir", test_user_state_dir);
|
||||
g_test_add_func ("/utils-isolated/user-runtime-dir", test_user_runtime_dir);
|
||||
return g_test_run ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user