Skip to content

Commit

Permalink
add --mac-metadata test for --format zip - see libarchive#2041 (l…
Browse files Browse the repository at this point in the history
…ibarchive#2045)

Submitting this test at the request of @kientzle on issue libarchive#2041.

Note that failure is currently expected, as the feature it tests is not
yet implemented!
  • Loading branch information
nielash authored Oct 22, 2024
1 parent e619342 commit ea56096
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 0 deletions.
1 change: 1 addition & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
1 change: 1 addition & 0 deletions tar/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
79 changes: 79 additions & 0 deletions tar/test/test_mac_metadata_zip.c
Original file line number Diff line number Diff line change
@@ -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
}
28 changes: 28 additions & 0 deletions tar/test/test_mac_metadata_zip.zip.uu
Original file line number Diff line number Diff line change
@@ -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
[email protected][/=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([email protected]#-]\]/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

0 comments on commit ea56096

Please sign in to comment.