]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
add `--mac-metadata` test for `--format zip` - see #2041 (#2045)
authornielash <nielronash@gmail.com>
Tue, 22 Oct 2024 09:16:55 +0000 (05:16 -0400)
committerGitHub <noreply@github.com>
Tue, 22 Oct 2024 09:16:55 +0000 (11:16 +0200)
Submitting this test at the request of @kientzle on issue #2041.

Note that failure is currently expected, as the feature it tests is not
yet implemented!

Makefile.am
tar/test/CMakeLists.txt
tar/test/test_mac_metadata_zip.c [new file with mode: 0644]
tar/test/test_mac_metadata_zip.zip.uu [new file with mode: 0644]

index c4537beabbab03f6709b8157be46711ee945f3e5..e310b02bee1b1c4c6999d6de69eb29f3af845fed 100644 (file)
@@ -1126,6 +1126,7 @@ bsdtar_test_SOURCES= \
        tar/test/test_format_newc.c \
        tar/test/test_help.c \
        tar/test/test_leading_slash.c \
+       tar/test/test_mac_metadata_zip.c \
        tar/test/test_missing_file.c \
        tar/test/test_option_C_mtree.c \
        tar/test/test_option_C_upper.c \
index 8d0ba4ad3e28e591cd4f5e5b0b4b71da24aa3a66..cd05153038697a00d9beb8a852281e8ac7702761 100644 (file)
@@ -29,6 +29,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
     test_format_newc.c
     test_help.c
     test_leading_slash.c
+    test_mac_metadata_zip.c
     test_missing_file.c
     test_option_C_upper.c
     test_option_C_mtree.c
diff --git a/tar/test/test_mac_metadata_zip.c b/tar/test/test_mac_metadata_zip.c
new file mode 100644 (file)
index 0000000..cd972b9
--- /dev/null
@@ -0,0 +1,79 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Martin Matuska
+ * All rights reserved.
+ */
+
+/*
+Notes on reffile creation:
+
+- I chose an existing small text file on my machine that had extended attributes.
+An easy way to generate one is to download a file from github in Google Chrome,
+as mac will automatically set a "com.apple.metadata:kMDItemWhereFroms" xattr on the file.
+It also would have worked to set an xattr manually using xattr -w [-rsx] attr_name attr_value file ...
+
+- to verify the names/values of xattrs, run: xattr -l filename
+
+- I then zipped the file using right-click > Compress in Finder
+(Apple's officially recommended method for zip file creation)
+
+- I then uuencoded the zip file by running: uuencode version.txt.zip test_mac_metadata_zip.zip
+
+Zip created 12-31-2023 on a 2022 Mac Studio running macOS Ventura 13.6.3 (22G436) (Apple M1 Ultra - arm64)
+
+Contents:
+ Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
+--------  ------  ------- ---- ---------- ----- --------  ----
+      15  Defl:N       17 -13% 09-21-2023 01:05 f542663d  version.txt
+    1038  Defl:N      668  36% 09-21-2023 01:05 85bdc448  __MACOSX/._version.txt
+--------          -------  ---                            -------
+    1053              685  35%                            2 files
+
+For additional notes, see: https://github.com/libarchive/libarchive/issues/2041#issuecomment-1873018929
+*/
+
+#include "test.h"
+
+DEFINE_TEST(test_mac_metadata_zip)
+{
+#if !defined(__APPLE__) || !defined(UF_COMPRESSED) || !defined(HAVE_SYS_XATTR_H)\
+       || !defined(HAVE_ZLIB_H)
+       skipping("MacOS-specific Mac Metadata test");
+#else
+       const char *reffile = "test_mac_metadata_zip.zip";
+
+       const char *testattr = "com.apple.metadata:kMDItemWhereFroms";
+       void *readval_orig;
+       void *readval;
+       size_t size;
+       int r;
+
+       extract_reference_file(reffile);
+
+       /* Extract an archive to disk with mac metadata. */
+       assertMakeDir("mac_metadata", 0755);
+       r = systemf("%s -x -C mac_metadata --mac-metadata -f %s >mac_metadata.out 2>mac_metadata.err", testprog, reffile);
+       assertEqualInt(r, 0);
+       assertFileSize("mac_metadata/version.txt", 15);
+       readval_orig = getXattr("mac_metadata/version.txt", testattr, &size);
+       assertEqualInt(size, 658);
+
+       /* Re-Archive with --mac-metadata --format zip */
+       assertMakeDir("mac_metadata/subdir", 0755);
+       r = systemf("%s --mac-metadata --format zip -cvf mac_metadata/subdir/archive.zip -C mac_metadata version.txt", testprog);
+       assertEqualInt(r, 0);
+       assertFileSize("mac_metadata/subdir/archive.zip", 1088);
+
+       /* Re-Extract with --mac-metadata, assert that xattr was preserved */
+       r = systemf("%s -x -C mac_metadata/subdir --mac-metadata -f mac_metadata/subdir/archive.zip >mac_metadata.out 2>mac_metadata.err", testprog);
+       assertEqualInt(r, 0);
+       assertFileSize("mac_metadata/subdir/version.txt", 15);
+       readval = getXattr("mac_metadata/subdir/version.txt", testattr, &size);
+       assertEqualInt(size, 658);
+
+       /* Assert that it is identical to original */
+       assertEqualMem(readval_orig, readval, size);
+       assertEqualFile("mac_metadata/version.txt", "mac_metadata/subdir/version.txt");
+#endif
+}
diff --git a/tar/test/test_mac_metadata_zip.zip.uu b/tar/test/test_mac_metadata_zip.zip.uu
new file mode 100644 (file)
index 0000000..f85c513
--- /dev/null
@@ -0,0 +1,28 @@
+begin 644 test_mac_metadata_zip.zip
+M4$L#!!0`"``(`+@(-5<```````````\````+`"``=F5R<VEO;BYT>'155`T`
+M!RW/"V5/?9%E-L\+975X"P`!!/4!```$%````"M*SLG/2U4H,]0S,]$SX`(`
+M4$L'"#UF0O41````#P```%!+`P04``@`"`"X"#57```````````.!```%@`@
+M`%]?34%#3U-8+RY?=F5R<VEO;BYT>'155`T`!RW/"V5/?9%EA'V1975X"P`!
+M!/4!```$%````(U336_3,!AVNTT,#<$0XD-HATJH@TM:QXG39%.$0K>I`PT0
+MG=C@4CG.VS8L7[/=L7'GRH&?P#_@PIE_P!_@R(DC!VY(.*1C8UQF*?;KQX^?
+MO/;[&,W=N(#J"&TQWGC2;^PVIJW$T$7]$81FONI1SV<OHW.U8'O[6165.VJ7
+MM$+]#&6VPM$B0K=YGK9842302IA4$PE1Q!3<>=JOJ+4EW?40NG+"2QE/JK5(
+M)_8>H>:I-5!,[V<K>UMKFPK2G3$(V!!Y*C5_YJ?N;B%T_82_/V&"92K.`#E?
+M%J!4_72W<:\<Y]!'^N/7X;5@_MU2X^;G;]_?GN_\9UM8)+%4&'^HU0=7Z\VQ
+M4H5<:;?S\!5P)5NC6(TGH3ZWX'FF(%,MG5V[0HU"Y-&$JSC/#`$),`D&DQ*4
+M0<"A(;3-CHLM8CGM86B:CLV804*3&K9M=PQ&7,=@0V9Z%@SY,*3W=XT@?6,$
+MR2@76C[U@YV^;?2V@J[1[P6$.LL5H2L@TGG$+/&#1YO!YL[CAR^"7;O;?[[>
+MHU;0)!L$$PM[Q-3A1!HZ+664L;1TQUY+>R!@?P)23077=$']XSW;F&)J>R^G
+M:^N'12Q`^A;&4Z0?CS*F)@)\DWB10R-*;4P<[H04L,U"EW8\SW-MR_*P->2T
+M`Y@3'G'7=#V/>IR:MAE&Q*6G!2'J`8M`2'^<Z[P85[D8Q)%OF=0EENTM[\%1
+M.<?+`HJ\C(ZO5@.RR#-]\]/Z&%&L`1F75?&94HR/4PTWK0=-@H=Q`AE+H6FM
+M'>B_:4I+':K_-=11`7YIP9BS4DA?7,Z5+JQ4`E@Z6*3'/JF<\,<4@B=Y!G^'
+MRA"RK=BH?6"V'+N%T3Q:J-N5[^JUJ0%G_O5C/=EO8^R:JP[%(1^2:+4[U@\$
+M5M%O4$L'"$C$O86<`@``#@0``%!+`0(4`Q0`"``(`+@(-5<]9D+U$0````\`
+M```+`"````````````"D@0````!V97)S:6]N+G1X=%54#0`'+<\+94]]D64V
+MSPME=7@+``$$]0$```04````4$L!`A0#%``(``@`N`@U5TC$O86<`@``#@0`
+M`!8`(````````````*2!:@```%]?34%#3U-8+RY?=F5R<VEO;BYT>'155`T`
+M!RW/"V5/?9%EA'V1975X"P`!!/4!```$%````%!+!08``````@`"`+T```!J
+%`P``````
+`
+end
\ No newline at end of file