]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Basic test for gzip compatibility.
authorTim Kientzle <kientzle@gmail.com>
Thu, 4 Dec 2008 21:58:03 +0000 (16:58 -0500)
committerTim Kientzle <kientzle@gmail.com>
Thu, 4 Dec 2008 21:58:03 +0000 (16:58 -0500)
I've commented out the test for handling concatenated gzip streams,
as it appears I need to do more work on refactoring the read
filter framework before this is reasonable to implement.
Fortunately, concatenated gzip streams are uncommon.

SVN-Revision: 262

Makefile.am
libarchive/test/Makefile
libarchive/test/test_compat_gzip.c [new file with mode: 0644]
libarchive/test/test_compat_gzip_1.tgz.uu [new file with mode: 0644]
libarchive/test/test_compat_gzip_2.tgz.uu [new file with mode: 0644]

index d4bc33d81f51ddafeeea2d937ed302dffaf586a7..546c7ccf473a670fa00a399e704d54694d9f9fd4 100644 (file)
@@ -183,6 +183,7 @@ libarchive_test_SOURCES=                                    \
        libarchive/test/test_bad_fd.c                           \
        libarchive/test/test_compat_bzip2.c                     \
        libarchive/test/test_compat_gtar.c                      \
+       libarchive/test/test_compat_gzip.c                      \
        libarchive/test/test_compat_tar_hardlink.c              \
        libarchive/test/test_compat_zip.c                       \
        libarchive/test/test_empty_write.c                      \
@@ -256,6 +257,8 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_compat_bzip2_1.tbz.uu                      \
        libarchive/test/test_compat_bzip2_2.tbz.uu                      \
        libarchive/test/test_compat_gtar_1.tgz.uu                       \
+       libarchive/test/test_compat_gzip_1.tgz.uu                       \
+       libarchive/test/test_compat_gzip_2.tgz.uu                       \
        libarchive/test/test_compat_tar_hardlink_1.tar.uu               \
        libarchive/test/test_compat_zip_1.zip.uu                        \
        libarchive/test/test_fuzz_1.iso.uu                              \
index c2635aa4107a7125ce9dc9e09e796d57799c7f20..46bd623d803c371d638eb00df02b58a186d896d6 100644 (file)
@@ -15,6 +15,7 @@ TESTS= \
        test_bad_fd.c                           \
        test_compat_bzip2.c                     \
        test_compat_gtar.c                      \
+       test_compat_gzip.c                      \
        test_compat_tar_hardlink.c              \
        test_compat_zip.c                       \
        test_empty_write.c                      \
diff --git a/libarchive/test/test_compat_gzip.c b/libarchive/test/test_compat_gzip.c
new file mode 100644 (file)
index 0000000..759af91
--- /dev/null
@@ -0,0 +1,94 @@
+/*-
+ * Copyright (c) 2003-2008 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+/*
+ * Verify our ability to read sample files compatibly with gunzip.
+ *
+ * In particular:
+ *  * gunzip will read multiple gzip streams, concatenating the output
+ *  * gunzip will stop at the end of a stream if the following data
+ *    doesn't start with a gzip signature.
+ */
+
+/*
+ * All of the sample files have the same contents; they're just
+ * compressed in different ways.
+ */
+static void
+verify(const char *name)
+{
+       const char *n[7] = { "f1", "f2", "f3", "d1/f1", "d1/f2", "d1/f3", NULL };
+       struct archive_entry *ae;
+       struct archive *a;
+       int i,r;
+
+       assert((a = archive_read_new()) != NULL);
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+       extract_reference_file(name);
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 200));
+
+       /* Read entries, match up names with list above. */
+       for (i = 0; i < 6; ++i) {
+               r = archive_read_next_header(a, &ae);
+               failure("Could not read file %d (%s) from %s", i, n[i], name);
+               assertEqualIntA(a, ARCHIVE_OK, r);
+               if (r != ARCHIVE_OK) {
+                       archive_read_finish(a);
+                       return;
+               }
+               assertEqualString(n[i], archive_entry_pathname(ae));
+       }
+
+       /* Verify the end-of-archive. */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       /* Verify that the format detection worked. */
+       assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_GZIP);
+       assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR);
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+#if ARCHIVE_VERSION_NUMBER < 2000000
+       archive_read_finish(a);
+#else
+       assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
+#endif
+}
+
+
+DEFINE_TEST(test_compat_gzip)
+{
+       /* This sample has been 'split', each piece compressed separately,
+        * then concatenated.  Gunzip will emit the concatenated result. */
+       /* Not supported in libarchive 2.6 and earlier */
+       /* verify("test_compat_gzip_1.tgz"); */
+       /* This sample has been compressed as a single stream, but then
+        * some unrelated garbage text has been appended to the end. */
+       verify("test_compat_gzip_2.tgz");
+}
+
+
diff --git a/libarchive/test/test_compat_gzip_1.tgz.uu b/libarchive/test/test_compat_gzip_1.tgz.uu
new file mode 100644 (file)
index 0000000..c4793a6
--- /dev/null
@@ -0,0 +1,22 @@
+begin 644 test_compat_gzip_1.tgz
+M'XL(")B^(DD``W1E<W0M<W!L:70N=&%R86$`2S-DH#DP,#`P,S%1`-*&YJ:&
+MR#0,&"L8`H&!J;&9F:&A@H&AH9&),8."`>V=QL!06ER26`1T2G9F:EY)54XJ
+MN>9`/*(`IX<(2#/D&F@GC`(Z``#S<P4"Z`,``!^+"`B8OB))``-T97-T+7-P
+M;&ET+G1A<F%B`&-@P`[2C'!(4!$8&!B8F9@H`&E#<U-#9!H&C!4,@<#`U-C,
+MS-!8P<#0T,C$C$'!@/9.8V`H+2Y)+`(Z)3LS-:^D*B>57',@'E&`TT,$I!EQ
+M#;031@$5`0`Q!<\4Z`,``!^+"`B8OB))``-T97-T+7-P;&ET+G1A<F%C`&-@
+M(`VD&9.H@0Q@8&!@9F*B`*0-S4T-D6D8,%8P!`(#4V,S,T,S!0-#0R-3(P8%
+M`]H[C8&AM+@DL0CHE.S,U+R2JIQ4<LV!>$0!3@\1D&;,-=!.&`5D``#7L]HO
+MZ`,``!^+"`B8OB))``-T97-T+7-P;&ET+G1A<F%D`&-@H`Y(,=1/,Z226;B`
+M@8&!F8F)`I`V-#<U1*9AP%C!$`@,3(W-S(S,%0P,#4U-S1@4#&CL+C`H+2Y)
+M+`(Z)3LS-:^D*B>57',@'E&`TT,$I!ER#;031@$>``"Y*#OBZ`,``!^+"`B8
+MOB))``-T97-T+7-P;&ET+G1A<F%E`&-@H"U(,=1/,Z*Q'08&!F8F)@I`VM#<
+MU!"9A@%C!4,@,#`U-C,S-E`P,#0T-35D4#"@L;O`H+2X)+$(Z)3LS-2\DJJ<
+M5'+-@7A$`4X/$9!FQ#703A@%0```]%Z(F^@#```?BP@(F+XB20`#=&5S="US
+M<&QI="YT87)A9@!C8!@8D&*HGV9,8SL,#`S,3$P4@+2AN:DA,@T#Q@J&0&!@
+M:FQF9FRH8&!H:&IJS*!@0&-W@4%I<4EB$=`IV9FI>255.:GDF@/QB`*<'B(@
+MS9AKH)TPH@``)4=8$>@#```?BP@(F+XB20`#=&5S="US<&QI="YT87)A9P!C
+M8!@%HV`4#'<``(`7"P;H`P``'XL(")B^(DD``W1E<W0M<W!L:70N=&%R86@`
+.8V`8&@``E#SI#J@`````
+`
+end
diff --git a/libarchive/test/test_compat_gzip_2.tgz.uu b/libarchive/test/test_compat_gzip_2.tgz.uu
new file mode 100644 (file)
index 0000000..92c0940
--- /dev/null
@@ -0,0 +1,9 @@
+begin 644 test_compat_gzip_2.tgz
+M'XL(`&76(DD``^W800["(!"%8=:>@ALXPP`]CXF=Q&A<:-UX>EN)C5M,AL;P
+MO@V[0A=_.E39F2.B'*.?5QX2?Z\?XGE&27)F]L0<HCA/]D=S[G&?#K?Y*.?3
+M>)V>E_'7YY07\>OZ)Y1W6Q\!-J3!?H^Z_J7TG]%_"QK0?\]4[/>HZS^_^T\!
+M_;>@@OY[=N2]6E\!JOH/P])_2OC^-X'YOV]+_]97@*K^A4K_C/Y;P/S?MZ5_
+MZRM`7?]<^L?_OR8P_P,`].D%,XR2*0`<``!4:&ES(&ES('5N<F5L871E9"!J
+@=6YK(&1A=&$@870@=&AE(&5N9"!O9B!T:&4@9FEL90H`
+`
+end