diff options
Diffstat (limited to 'usr.bin/tar/test/test_basic.c')
-rw-r--r-- | usr.bin/tar/test/test_basic.c | 132 |
1 files changed, 31 insertions, 101 deletions
diff --git a/usr.bin/tar/test/test_basic.c b/usr.bin/tar/test/test_basic.c index 3fad754..1fa3341 100644 --- a/usr.bin/tar/test/test_basic.c +++ b/usr.bin/tar/test/test_basic.c @@ -30,24 +30,16 @@ static void basic_tar(const char *target, const char *pack_options, const char *unpack_options, const char *flist) { - struct stat st, st2; -#if !defined(_WIN32) || defined(__CYGWIN__) - char buff[128]; -#endif int r; - assertEqualInt(0, mkdir(target, 0775)); + assertMakeDir(target, 0775); /* Use the tar program to create an archive. */ -#if !defined(_WIN32) || defined(__CYGWIN__) - r = systemf("%s cf - %s `cat %s` >%s/archive 2>%s/pack.err", testprog, pack_options, flist, target, target); -#else r = systemf("%s cf - %s %s >%s/archive 2>%s/pack.err", testprog, pack_options, flist, target, target); -#endif failure("Error invoking %s cf -", testprog, pack_options); assertEqualInt(r, 0); - chdir(target); + assertChdir(target); /* Verify that nothing went to stderr. */ assertEmptyFile("pack.err"); @@ -67,119 +59,57 @@ basic_tar(const char *target, const char *pack_options, */ /* Regular file with 2 links. */ - r = lstat("file", &st); - failure("Failed to stat file %s/file, errno=%d", target, errno); - assertEqualInt(r, 0); - if (r == 0) { - assert(S_ISREG(st.st_mode)); -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(0644, st.st_mode & 0777); -#else - assertEqualInt(0600, st.st_mode & 0700); -#endif - assertEqualInt(10, st.st_size); - failure("file %s/file", target); - assertEqualInt(2, st.st_nlink); - } + assertIsReg("file", -1); + assertFileSize("file", 10); + failure("%s", target); + assertFileNLinks("file", 2); /* Another name for the same file. */ - r = lstat("linkfile", &st2); - failure("Failed to stat file %s/linkfile, errno=%d", target, errno); - assertEqualInt(r, 0); - if (r == 0) { - assert(S_ISREG(st2.st_mode)); -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(0644, st2.st_mode & 0777); -#else - assertEqualInt(0600, st2.st_mode & 0700); -#endif - assertEqualInt(10, st2.st_size); - failure("file %s/linkfile", target); - assertEqualInt(2, st2.st_nlink); - /* Verify that the two are really hardlinked. */ - assertEqualInt(st.st_dev, st2.st_dev); - failure("%s/linkfile and %s/file aren't really hardlinks", target, target); - assertEqualInt(st.st_ino, st2.st_ino); - } - -#if !defined(_WIN32) || defined(__CYGWIN__) + assertIsReg("linkfile", -1); + assertFileSize("linkfile", 10); + assertFileNLinks("linkfile", 2); + assertIsHardlink("file", "linkfile"); + /* Symlink */ - r = lstat("symlink", &st); - failure("Failed to stat file %s/symlink, errno=%d", target, errno); - assertEqualInt(r, 0); - if (r == 0) { - failure("symlink should be a symlink; actual mode is %o", - st.st_mode); - assert(S_ISLNK(st.st_mode)); - if (S_ISLNK(st.st_mode)) { - r = readlink("symlink", buff, sizeof(buff)); - assertEqualInt(r, 4); - buff[r] = '\0'; - assertEqualString(buff, "file"); - } - } -#endif + if (canSymlink()) + assertIsSymlink("symlink", "file"); /* dir */ - r = lstat("dir", &st); - if (r == 0) { - assertEqualInt(r, 0); - assert(S_ISDIR(st.st_mode)); -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(0775, st.st_mode & 0777); -#else - assertEqualInt(0700, st.st_mode & 0700); -#endif - } - - chdir(".."); + assertIsDir("dir", 0775); + assertChdir(".."); } DEFINE_TEST(test_basic) { - int fd; - int filelist; - int oldumask; + FILE *f; const char *flist; - oldumask = umask(0); - - /* - * Create an assortment of files on disk. - */ - filelist = open("filelist", O_CREAT | O_WRONLY, 0644); + assertUmask(0); /* File with 10 bytes content. */ - fd = open("file", O_CREAT | O_WRONLY, 0644); - assert(fd >= 0); - assertEqualInt(10, write(fd, "123456789", 10)); - close(fd); - write(filelist, "file\n", 5); + f = fopen("file", "wb"); + assert(f != NULL); + assertEqualInt(10, fwrite("123456789", 1, 10, f)); + fclose(f); /* hardlink to above file. */ - assertEqualInt(0, link("file", "linkfile")); - write(filelist, "linkfile\n", 9); + assertMakeHardlink("linkfile", "file"); + assertIsHardlink("file", "linkfile"); /* Symlink to above file. */ - assertEqualInt(0, symlink("file", "symlink")); - write(filelist, "symlink\n", 8); + if (canSymlink()) + assertMakeSymlink("symlink", "file"); /* Directory. */ - assertEqualInt(0, mkdir("dir", 0775)); - write(filelist, "dir\n", 4); - /* All done. */ - close(filelist); - -#if !defined(_WIN32) || defined(__CYGWIN__) - flist = "filelist"; -#else - flist = "file linkfile symlink dir"; -#endif + assertMakeDir("dir", 0775); + + if (canSymlink()) + flist = "file linkfile symlink dir"; + else + flist = "file linkfile dir"; /* Archive/dearchive with a variety of options. */ basic_tar("copy", "", "", flist); /* tar doesn't handle cpio symlinks correctly */ /* basic_tar("copy_odc", "--format=odc", ""); */ basic_tar("copy_ustar", "--format=ustar", "", flist); - - umask(oldumask); } |