diff options
Diffstat (limited to 'usr.bin/cpio/test/test_basic.c')
-rw-r--r-- | usr.bin/cpio/test/test_basic.c | 177 |
1 files changed, 45 insertions, 132 deletions
diff --git a/usr.bin/cpio/test/test_basic.c b/usr.bin/cpio/test/test_basic.c index a4eb60f..3a3fae8 100644 --- a/usr.bin/cpio/test/test_basic.c +++ b/usr.bin/cpio/test/test_basic.c @@ -26,106 +26,32 @@ __FBSDID("$FreeBSD$"); static void -verify_files(const char *target) +verify_files(const char *msg) { - struct stat st, st2; -#if !defined(_WIN32) || defined(__CYGWIN__) - char buff[128]; -#endif - int r; - /* * Verify unpacked files. */ /* 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__) - /* Group members bits and others bits do not work. */ - assertEqualInt(0600, st.st_mode & 0700); -#else - assertEqualInt(0644, st.st_mode & 0777); -#endif - assertEqualInt(10, st.st_size); - failure("file %s/file should have 2 links", target); - assertEqualInt(2, st.st_nlink); - } + assertIsReg("file", 0644); + failure(msg); + assertFileSize("file", 10); + 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__) - /* Group members bits and others bits do not work. */ - assertEqualInt(0600, st2.st_mode & 0700); -#else - assertEqualInt(0644, st2.st_mode & 0777); -#endif - assertEqualInt(10, st2.st_size); - failure("file %s/linkfile should have 2 links", 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 should be hardlinked", - target, target); - assertEqualInt(st.st_ino, st2.st_ino); - } + assertIsHardlink("linkfile", "file"); /* Symlink */ - r = lstat("symlink", &st); - failure("Failed to stat file %s/symlink, errno=%d", target, errno); - assertEqualInt(r, 0); -#if !defined(_WIN32) || defined(__CYGWIN__) - 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"); /* Another file with 1 link and different permissions. */ - r = lstat("file2", &st); - failure("Failed to stat file %s/file2, errno=%d", target, errno); - assertEqualInt(r, 0); - if (r == 0) { - assert(S_ISREG(st.st_mode)); - failure("%s/file2: st.st_mode = %o", target, st.st_mode); -#if defined(_WIN32) && !defined(__CYGWIN__) - /* Execution bit and group members bits and others - * bits do not work. */ - assertEqualInt(0600, st.st_mode & 0700); -#else - assertEqualInt(0777, st.st_mode & 0777); -#endif - assertEqualInt(10, st.st_size); - failure("file %s/file2 should have 1 link", target); - assertEqualInt(1, st.st_nlink); - } + assertIsReg("file2", 0777); + assertFileSize("file2", 10); + assertFileNLinks("file2", 1); /* dir */ - r = lstat("dir", &st); - if (r == 0) { - assertEqualInt(r, 0); - assert(S_ISDIR(st.st_mode)); - failure("%s/dir: st.st_mode = %o", target, st.st_mode); -#if defined(_WIN32) && !defined(__CYGWIN__) - assertEqualInt(0700, st.st_mode & 0700); -#else - assertEqualInt(0775, st.st_mode & 0777); -#endif - } + assertIsDir("dir", 0775); } static void @@ -136,7 +62,7 @@ basic_cpio(const char *target, { int r; - if (!assertEqualInt(0, mkdir(target, 0775))) + if (!assertMakeDir(target, 0775)) return; /* Use the cpio program to create an archive. */ @@ -145,7 +71,7 @@ basic_cpio(const char *target, failure("Error invoking %s -o %s", testprog, pack_options); assertEqualInt(r, 0); - chdir(target); + assertChdir(target); /* Verify stderr. */ failure("Expected: %s, options=%s", se, pack_options); @@ -163,9 +89,9 @@ basic_cpio(const char *target, failure("Error invoking %s -i %s in dir %s", testprog, unpack_options, target); assertTextFileContents(se, "unpack.err"); - verify_files(target); + verify_files(pack_options); - chdir(".."); + assertChdir(".."); } static void @@ -173,7 +99,7 @@ passthrough(const char *target) { int r; - if (!assertEqualInt(0, mkdir(target, 0775))) + if (!assertMakeDir(target, 0775)) return; /* @@ -184,77 +110,64 @@ passthrough(const char *target) failure("Error invoking %s -p", testprog); assertEqualInt(r, 0); - chdir(target); + assertChdir(target); /* Verify stderr. */ failure("Error invoking %s -p in dir %s", testprog, target); assertTextFileContents("1 block\n", "stderr"); - verify_files(target); - chdir(".."); + verify_files("passthrough"); + assertChdir(".."); } DEFINE_TEST(test_basic) { - int fd; - int filelist; - int oldumask; + FILE *filelist; + const char *msg; - oldumask = umask(0); + assertUmask(0); /* * Create an assortment of files on disk. */ - filelist = open("filelist", O_CREAT | O_WRONLY, 0644); + filelist = fopen("filelist", "w"); /* 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); + assertMakeFile("file", 0644, "1234567890"); + fprintf(filelist, "file\n"); /* hardlink to above file. */ - assertEqualInt(0, link("file", "linkfile")); - write(filelist, "linkfile\n", 9); + assertMakeHardlink("linkfile", "file"); + fprintf(filelist, "linkfile\n"); /* Symlink to above file. */ - assertEqualInt(0, symlink("file", "symlink")); - write(filelist, "symlink\n", 8); + if (canSymlink()) { + assertMakeSymlink("symlink", "file"); + fprintf(filelist, "symlink\n"); + } /* Another file with different permissions. */ - fd = open("file2", O_CREAT | O_WRONLY, 0777); - assert(fd >= 0); - assertEqualInt(10, write(fd, "123456789", 10)); - close(fd); - write(filelist, "file2\n", 6); + assertMakeFile("file2", 0777, "1234567890"); + fprintf(filelist, "file2\n"); /* Directory. */ - assertEqualInt(0, mkdir("dir", 0775)); - write(filelist, "dir\n", 4); + assertMakeDir("dir", 0775); + fprintf(filelist, "dir\n"); /* All done. */ - close(filelist); + fclose(filelist); - umask(022); + assertUmask(022); /* Archive/dearchive with a variety of options. */ - basic_cpio("copy", "", "", "2 blocks\n"); - basic_cpio("copy_odc", "--format=odc", "", "2 blocks\n"); + msg = canSymlink() ? "2 blocks\n" : "1 block\n"; + basic_cpio("copy", "", "", msg); + basic_cpio("copy_odc", "--format=odc", "", msg); basic_cpio("copy_newc", "-H newc", "", "2 blocks\n"); - basic_cpio("copy_cpio", "-H odc", "", "2 blocks\n"); -#if defined(_WIN32) && !defined(__CYGWIN__) - /* - * On Windows, symbolic link does not work. - * Currentry copying file instead. therefore block size is - * different. - */ - basic_cpio("copy_ustar", "-H ustar", "", "10 blocks\n"); -#else - basic_cpio("copy_ustar", "-H ustar", "", "9 blocks\n"); -#endif + basic_cpio("copy_cpio", "-H odc", "", msg); + msg = canSymlink() ? "9 blocks\n" : "8 blocks\n"; + basic_cpio("copy_ustar", "-H ustar", "", msg); + /* Copy in one step using -p */ passthrough("passthrough"); - - umask(oldumask); } |