예제 #1
0
파일: fs_test.c 프로젝트: phoatfreebsd/kyua
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));
}
예제 #2
0
파일: fs_test.c 프로젝트: phoatfreebsd/kyua
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));
}
예제 #3
0
int
main(int argc, char *argv[])
{

	setprogname(argv[0]);
	return mount_tmpfs(argc, argv);
}
예제 #4
0
파일: fs_test.c 프로젝트: phoatfreebsd/kyua
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));
    }
}
예제 #5
0
파일: fs_test.c 프로젝트: phoatfreebsd/kyua
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));
}
예제 #6
0
파일: fs_test.c 프로젝트: phoatfreebsd/kyua
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"));
}
예제 #7
0
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;
}
예제 #8
0
파일: chrootenv.c 프로젝트: bb010g/nixpkgs
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);
}