bool TestExtFile::test_realpath() {
  f_touch("test/test_ext_file.tmp");
  String resolved = f_realpath("test/test_ext_file.tmp");
  VERIFY(resolved.size() > 22);
  VS(resolved.substr(resolved.size() - 22), "test/test_ext_file.tmp");
  return Count(true);
}
bool TestExtFile::test_unlink() {
  f_touch("test/test_ext_file.tmp");
  VERIFY(f_file_exists("test/test_ext_file.tmp"));
  f_unlink("test/test_ext_file.tmp");
  VERIFY(!f_file_exists("test/test_ext_file.tmp"));
  return Count(true);
}
bool TestExtFile::test_linkinfo() {
  if (f_file_exists("test/test_ext_file2.tmp")) {
    f_unlink("test/test_ext_file2.tmp");
    VERIFY(!f_file_exists("test/test_ext_file2.tmp"));
  }
  f_touch("test/test_ext_file.tmp");
  f_symlink("test/test_ext_file.tmp", "test/test_ext_file2.tmp");
  VERIFY(more(f_linkinfo("test/test_ext_file2.tmp"), 0));
  return Count(true);
}
bool TestExtFile::test_readlink() {
  if (f_file_exists("test/test_ext_file2.tmp")) {
    f_unlink("test/test_ext_file2.tmp");
    VERIFY(!f_file_exists("test/test_ext_file2.tmp"));
  }
  f_touch("test/test_ext_file.tmp");
  f_symlink("test/test_ext_file.tmp", "test/test_ext_file2.tmp");
  String resolved = f_readlink("test/test_ext_file2.tmp");
  VS(resolved.substr(resolved.size() - 22), "test/test_ext_file.tmp");
  return Count(true);
}
bool TestExtFile::test_rename() {
  if (f_file_exists("test/ext/test_ext_file2.tmp")) {
    f_unlink("test/ext/test_ext_file2.tmp");
    VERIFY(!f_file_exists("test/ext/test_ext_file2.tmp"));
  }
  f_touch("test/ext/test_ext_file.tmp");
  f_rename("test/ext/test_ext_file.tmp", "test/ext/test_ext_file2.tmp");
  VERIFY(f_file_exists("test/ext/test_ext_file2.tmp"));
  VERIFY(!f_file_exists("test/ext/test_ext_file.tmp"));
  return Count(true);
}
bool TestExtFile::test_copy() {
  if (f_file_exists("test/test_ext_file2.tmp")) {
    f_unlink("test/test_ext_file2.tmp");
    VERIFY(!f_file_exists("test/test_ext_file2.tmp"));
  }
  if (f_file_exists("test/test_ext_file3.tmp")) {
    f_unlink("test/test_ext_file3.tmp");
    VERIFY(!f_file_exists("test/test_ext_file3.tmp"));
  }
  f_touch("test/test_ext_file.tmp");
  f_copy("test/test_ext_file.tmp", "test/test_ext_file2.tmp");
  VERIFY(f_file_exists("test/test_ext_file2.tmp"));
  VERIFY(f_file_exists("test/test_ext_file.tmp"));

  // XXX disabled until we work out flaky network issues. t2183444
#if 0
  f_copy("http://facebook.com", "test/test_ext_file3.tmp");
  VERIFY(f_file_exists("test/test_ext_file3.tmp"));
#endif
  return Count(true);
}
bool TestExtFile::test_glob() {
  f_touch("test/test_ext_file.tmp");
  VS(f_glob("test/test_*_file.tmp"), CREATE_VECTOR1("test/test_ext_file.tmp"));
  return Count(true);
}
bool TestExtFile::test_lchown() {
  f_touch("test/test_ext_file.tmp");
  f_lchown("test/test_ext_file.tmp", "root");
  return Count(true);
}
bool TestExtFile::test_chgrp() {
  f_touch("test/test_ext_file.tmp");
  f_chgrp("test/test_ext_file.tmp", "root");
  f_unlink("test/test_ext_file.tmp");
  return Count(true);
}