]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Issue 780: Extend the ISO9660 test with deeper heirarchies
authorTim Kientzle <kientzle@acm.org>
Sat, 24 Sep 2016 18:45:20 +0000 (11:45 -0700)
committerTim Kientzle <kientzle@acm.org>
Sat, 24 Sep 2016 18:45:20 +0000 (11:45 -0700)
libarchive/test/test_write_format_iso9660.c

index 1ea69a18359561cd40cc46dcdb5488fbd03e6bfd..ee6db6fed3b2bbdb61c0b472d644d45d0d63cd11 100644 (file)
@@ -117,8 +117,8 @@ DEFINE_TEST(test_write_format_iso9660)
         */
        dirname[0] = '\0';
        strcpy(dir, "/dir0");
-       for (i = 0; i < 10; i++) {
-               dir[4] = '0' + i;
+       for (i = 0; i < 13; i++) {
+               dir[4] = "0123456789ABCDEF"[i];
                if (i == 0)
                        strcat(dirname, dir+1);
                else
@@ -134,6 +134,19 @@ DEFINE_TEST(test_write_format_iso9660)
                archive_entry_free(ae);
        }
 
+       strcat(dirname, "/file");
+       assert((ae = archive_entry_new()) != NULL);
+       archive_entry_set_atime(ae, 2, 20);
+       archive_entry_set_birthtime(ae, 3, 30);
+       archive_entry_set_ctime(ae, 4, 40);
+       archive_entry_set_mtime(ae, 5, 50);
+       archive_entry_copy_pathname(ae, dirname);
+       archive_entry_set_mode(ae, S_IFREG | 0755);
+       archive_entry_set_size(ae, 8);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+       archive_entry_free(ae);
+       assertEqualIntA(a, 8, archive_write_data(a, "12345678", 9));
+
        /*
         * "dir0/dir1/file1" has 8 bytes of data.
         */
@@ -332,6 +345,45 @@ DEFINE_TEST(test_write_format_iso9660)
        assert((S_IFDIR | 0555) == archive_entry_mode(ae));
        assertEqualInt(2048, archive_entry_size(ae));
 
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(2, archive_entry_atime(ae));
+       assertEqualInt(3, archive_entry_birthtime(ae));
+       assertEqualInt(4, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0555) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(2, archive_entry_atime(ae));
+       assertEqualInt(3, archive_entry_birthtime(ae));
+       assertEqualInt(4, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0555) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(2, archive_entry_atime(ae));
+       assertEqualInt(3, archive_entry_birthtime(ae));
+       assertEqualInt(4, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0555) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
        /*
         * Read "hardlnk"
         */
@@ -385,6 +437,21 @@ DEFINE_TEST(test_write_format_iso9660)
        assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
        assertEqualMem(buff2, "12345678", 8);
 
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(2, archive_entry_atime(ae));
+       assertEqualInt(3, archive_entry_birthtime(ae));
+       assertEqualInt(4, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file", archive_entry_pathname(ae));
+       assert((AE_IFREG | 0555) == archive_entry_mode(ae));
+       assertEqualInt(1, archive_entry_nlink(ae));
+       assertEqualInt(8, archive_entry_size(ae));
+       assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
+       assertEqualMem(buff2, "12345678", 8);
+
        /*
         * Read "dir0/dir1/file1"
         */
@@ -580,29 +647,65 @@ DEFINE_TEST(test_write_format_iso9660)
        assertEqualInt(2048, archive_entry_size(ae));
 
        /*
-        * Read "hardlnk"
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA"
         */
        assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
        assertEqualInt(5, archive_entry_atime(ae));
        assertEqualInt(5, archive_entry_ctime(ae));
        assertEqualInt(5, archive_entry_mtime(ae));
-       assertEqualString("hardlnk", archive_entry_pathname(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "file"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("file", archive_entry_pathname(ae));
        assert((AE_IFREG | 0400) == archive_entry_mode(ae));
-       assertEqualInt(2, archive_entry_nlink(ae));
        assertEqualInt(8, archive_entry_size(ae));
        assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
        assertEqualMem(buff2, "12345678", 8);
 
        /*
-        * Read "file"
+        * Read "hardlnk"
         */
        assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
        assertEqualInt(5, archive_entry_atime(ae));
        assertEqualInt(5, archive_entry_ctime(ae));
        assertEqualInt(5, archive_entry_mtime(ae));
-       assertEqualString("file", archive_entry_pathname(ae));
-       assertEqualString("hardlnk", archive_entry_hardlink(ae));
+       assertEqualString("hardlnk", archive_entry_pathname(ae));
+       assertEqualString("file", archive_entry_hardlink(ae));
        assert((AE_IFREG | 0400) == archive_entry_mode(ae));
+       assertEqualInt(2, archive_entry_nlink(ae));
        assertEqualInt(0, archive_entry_size(ae));
        assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
 
@@ -624,6 +727,22 @@ DEFINE_TEST(test_write_format_iso9660)
        assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
        assertEqualMem(buff2, "12345678", 8);
 
+       /*
+        * Read "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString(
+               "dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dirA/dirB/dirC/file",
+               archive_entry_pathname(ae));
+       assert((AE_IFREG | 0400) == archive_entry_mode(ae));
+       assertEqualInt(1, archive_entry_nlink(ae));
+       assertEqualInt(8, archive_entry_size(ae));
+       assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
+       assertEqualMem(buff2, "12345678", 8);
+
        /*
         * Read "dir0/dir1/file1"
         */
@@ -745,6 +864,42 @@ DEFINE_TEST(test_write_format_iso9660)
        assert((S_IFDIR | 0700) == archive_entry_mode(ae));
        assertEqualInt(2048, archive_entry_size(ae));
 
+       /*
+        * Read "rr_moved/dir7/dir8/dir9/dira"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "rr_moved/dir7/dir8/dir9/dira/dirB"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
+       /*
+        * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString("RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC",
+           archive_entry_pathname(ae));
+       assert((S_IFDIR | 0700) == archive_entry_mode(ae));
+       assertEqualInt(2048, archive_entry_size(ae));
+
        /*
         * Read "dir0"
         */
@@ -827,33 +982,35 @@ DEFINE_TEST(test_write_format_iso9660)
        assertEqualInt(2048, archive_entry_size(ae));
 
        /*
-        * Read "file"
+        * Read "hardlink"
         */
        assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
        assertEqualInt(5, archive_entry_atime(ae));
-       assertEqualInt(0, archive_entry_birthtime(ae));
        assertEqualInt(5, archive_entry_ctime(ae));
        assertEqualInt(5, archive_entry_mtime(ae));
-       assertEqualString("FILE", archive_entry_pathname(ae));
+       assertEqualString("HARDLNK", archive_entry_pathname(ae));
+       assertEqualString(NULL, archive_entry_hardlink(ae));
        assert((AE_IFREG | 0400) == archive_entry_mode(ae));
-       assertEqualInt(2, archive_entry_nlink(ae));
        assertEqualInt(8, archive_entry_size(ae));
        assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
        assertEqualMem(buff2, "12345678", 8);
 
        /*
-        * Read "hardlink"
+        * Read "file"
         */
        assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
        assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(0, archive_entry_birthtime(ae));
        assertEqualInt(5, archive_entry_ctime(ae));
        assertEqualInt(5, archive_entry_mtime(ae));
-       assertEqualString("HARDLNK", archive_entry_pathname(ae));
-       assertEqualString("FILE", archive_entry_hardlink(ae));
+       assertEqualString("FILE", archive_entry_pathname(ae));
+       assertEqualString("HARDLNK", archive_entry_hardlink(ae));
        assert((AE_IFREG | 0400) == archive_entry_mode(ae));
+       assertEqualInt(2, archive_entry_nlink(ae));
        assertEqualInt(0, archive_entry_size(ae));
        assertEqualIntA(a, 0, archive_read_data(a, buff2, 10));
 
+
        /*
         * Read longname
         */
@@ -870,6 +1027,22 @@ DEFINE_TEST(test_write_format_iso9660)
        assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
        assertEqualMem(buff2, "12345678", 8);
 
+       /*
+        * Read "rr_moved/dir7/dir8/dir9/dirA/dirB/dirC/file"
+        */
+       assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
+       assertEqualInt(5, archive_entry_atime(ae));
+       assertEqualInt(5, archive_entry_ctime(ae));
+       assertEqualInt(5, archive_entry_mtime(ae));
+       assertEqualString(
+               "RR_MOVED/DIR7/DIR8/DIR9/DIRA/DIRB/DIRC/FILE",
+               archive_entry_pathname(ae));
+       assert((AE_IFREG | 0400) == archive_entry_mode(ae));
+       assertEqualInt(1, archive_entry_nlink(ae));
+       assertEqualInt(8, archive_entry_size(ae));
+       assertEqualIntA(a, 8, archive_read_data(a, buff2, 10));
+       assertEqualMem(buff2, "12345678", 8);
+
        /*
         * Read "dir0/dir1/file1"
         */