ATF_TC_BODY(cleanup__mount_point__overlayed, tc) { ATF_REQUIRE(mkdir("root", 0755) != -1); ATF_REQUIRE(mkdir("root/dir1", 0755) != -1); atf_utils_create_file("root/zz", "%s", ""); mount_tmpfs("root/dir1"); mount_tmpfs("root/dir1"); ATF_REQUIRE(!kyua_error_is_set(kyua_fs_cleanup("root"))); ATF_REQUIRE(!lookup(".", "root", DT_DIR)); }
ATF_TC_BODY(cleanup__mount_point__nested, tc) { ATF_REQUIRE(mkdir("root", 0755) != -1); ATF_REQUIRE(mkdir("root/dir1", 0755) != -1); ATF_REQUIRE(mkdir("root/dir1/dir2", 0755) != -1); ATF_REQUIRE(mkdir("root/dir3", 0755) != -1); mount_tmpfs("root/dir1/dir2"); mount_tmpfs("root/dir3"); ATF_REQUIRE(mkdir("root/dir1/dir2/dir4", 0755) != -1); mount_tmpfs("root/dir1/dir2/dir4"); ATF_REQUIRE(mkdir("root/dir1/dir2/not-mount-point", 0755) != -1); ATF_REQUIRE(!kyua_error_is_set(kyua_fs_cleanup("root"))); ATF_REQUIRE(!lookup(".", "root", DT_DIR)); }
int main(int argc, char *argv[]) { setprogname(argv[0]); return mount_tmpfs(argc, argv); }
ATF_TC_BODY(cleanup__mount_point__busy, tc) { ATF_REQUIRE(mkdir("root", 0755) != -1); ATF_REQUIRE(mkdir("root/dir1", 0755) != -1); mount_tmpfs("root/dir1"); pid_t pid = fork(); ATF_REQUIRE(pid != -1); if (pid == 0) { if (chdir("root/dir1") == -1) abort(); atf_utils_create_file("dont-delete-me", "%s", ""); atf_utils_create_file("../../done", "%s", ""); pause(); exit(EXIT_SUCCESS); } else { fprintf(stderr, "Waiting for child to finish preparations\n"); while (!atf_utils_file_exists("done")) {} fprintf(stderr, "Child done; cleaning up\n"); ATF_REQUIRE(kyua_error_is_set(kyua_fs_cleanup("root"))); ATF_REQUIRE(atf_utils_file_exists("root/dir1/dont-delete-me")); fprintf(stderr, "Killing child\n"); ATF_REQUIRE(kill(pid, SIGKILL) != -1); int status; ATF_REQUIRE(waitpid(pid, &status, 0) != -1); ATF_REQUIRE(!kyua_error_is_set(kyua_fs_cleanup("root"))); ATF_REQUIRE(!lookup(".", "root", DT_DIR)); } }
ATF_TC_BODY(cleanup__mount_point__links, tc) { ATF_REQUIRE(mkdir("root", 0755) != -1); ATF_REQUIRE(mkdir("root/dir1", 0755) != -1); ATF_REQUIRE(mkdir("root/dir3", 0755) != -1); mount_tmpfs("root/dir1"); ATF_REQUIRE(symlink("../dir3", "root/dir1/link") != -1); ATF_REQUIRE(!kyua_error_is_set(kyua_fs_cleanup("root"))); ATF_REQUIRE(!lookup(".", "root", DT_DIR)); }
ATF_TC_BODY(unmount__ok, tc) { ATF_REQUIRE(mkdir("mount_point", 0755) != -1); atf_utils_create_file("mount_point/test1", "%s", ""); mount_tmpfs("mount_point"); atf_utils_create_file("mount_point/test2", "%s", ""); ATF_REQUIRE(!atf_utils_file_exists("mount_point/test1")); ATF_REQUIRE( atf_utils_file_exists("mount_point/test2")); kyua_fs_unmount("mount_point"); ATF_REQUIRE( atf_utils_file_exists("mount_point/test1")); ATF_REQUIRE(!atf_utils_file_exists("mount_point/test2")); }
static int tmpfs_mount(am_node *am, mntfs *mf) { int on_autofs = mf->mf_flags & MFF_ON_AUTOFS; int error; error = mount_tmpfs(mf->mf_mount, mf->mf_info, mf->mf_mopts, on_autofs); if (error) { errno = error; plog(XLOG_ERROR, "mount_tmpfs: %m"); return error; } return 0; }
void bind(const gchar *host, const gchar *guest) { mount_tmpfs(guest); pivot_host(guest); g_autofree gchar *host_dir = g_build_filename("/host", host, NULL); g_autoptr(GError) err = NULL; g_autoptr(GDir) dir = g_dir_open(host_dir, 0, &err); if (err != NULL) fail("g_dir_open", errno); const gchar *item; while ((item = g_dir_read_name(dir))) if (!g_strv_contains(bind_blacklist, item)) bind_mount_item(host_dir, "/", item); }