diff options
author | Daiki Ueno <dueno@src.gnome.org> | 2021-02-11 17:19:05 +0100 |
---|---|---|
committer | Daiki Ueno <dueno@src.gnome.org> | 2021-03-27 09:49:47 +0100 |
commit | 04c2c84e776f2af3639cd79d69009efdd189e293 (patch) | |
tree | 6ab0c23718a35890f888ad513e14854e8f7cfd42 /egg | |
parent | 0932602d1af98c35bd2030629c517c173b480381 (diff) | |
download | gcr-04c2c84e776f2af3639cd79d69009efdd189e293.tar.gz |
egg: Port scratch file/directory functions from gnome-keyring
Those are useful for testing ssh-agent stuff.
Diffstat (limited to 'egg')
-rw-r--r-- | egg/egg-testing.c | 68 | ||||
-rw-r--r-- | egg/egg-testing.h | 8 |
2 files changed, 76 insertions, 0 deletions
diff --git a/egg/egg-testing.c b/egg/egg-testing.c index 6ca46a8..6439366 100644 --- a/egg/egg-testing.c +++ b/egg/egg-testing.c @@ -332,3 +332,71 @@ egg_tests_run_with_loop (void) return ret; } + +void +egg_tests_copy_scratch_file (const gchar *directory, + const gchar *filename) +{ + GError *error = NULL; + gchar *basename; + gchar *contents; + gchar *destination; + gsize length; + + g_assert (directory); + + g_file_get_contents (filename, &contents, &length, &error); + g_assert_no_error (error); + + basename = g_path_get_basename (filename); + destination = g_build_filename (directory, basename, NULL); + g_free (basename); + + g_file_set_contents (destination, contents, length, &error); + g_assert_no_error (error); + g_free (destination); + g_free (contents); +} + +gchar * +egg_tests_create_scratch_directory (const gchar *file_to_copy, + ...) +{ + gchar *basename; + gchar *directory; + va_list va; + + basename = g_path_get_basename (g_get_prgname ()); + directory = g_strdup_printf ("/tmp/scratch-%s.XXXXXX", basename); + g_free (basename); + + if (!g_mkdtemp (directory)) + g_assert_not_reached (); + + va_start (va, file_to_copy); + + while (file_to_copy != NULL) { + egg_tests_copy_scratch_file (directory, file_to_copy); + file_to_copy = va_arg (va, const gchar *); + } + + va_end (va); + + return directory; +} + +void +egg_tests_remove_scratch_directory (const gchar *directory) +{ + gchar *argv[] = { "rm", "-rf", (gchar *)directory, NULL }; + GError *error = NULL; + gint rm_status; + + g_assert_cmpstr (directory, !=, ""); + g_assert_cmpstr (directory, !=, "/"); + + g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, + NULL, NULL, NULL, &rm_status, &error); + g_assert_no_error (error); + g_assert_cmpint (rm_status, ==, 0); +} diff --git a/egg/egg-testing.h b/egg/egg-testing.h index a98a782..4a5373f 100644 --- a/egg/egg-testing.h +++ b/egg/egg-testing.h @@ -74,4 +74,12 @@ gint egg_tests_run_with_loop (void); } \ G_STMT_END +void egg_tests_copy_scratch_file (const gchar *directory, + const gchar *file_to_copy); + +gchar * egg_tests_create_scratch_directory (const gchar *file_to_copy, + ...) G_GNUC_NULL_TERMINATED; + +void egg_tests_remove_scratch_directory (const gchar *directory); + #endif /* EGG_DH_H_ */ |