1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
#!/bin/sh
# SPDX-License-Identifier: 0BSD
###############################################################################
#
# Author: Jia Tan
#
###############################################################################
# Optional argument:
# $1 = directory of the xz executable
# If xz was not built, skip this test. Autotools and CMake put
# the xz executable in a different location.
XZ=${1:-../src/xz}/xz
if test ! -x "$XZ"; then
echo "xz was not built, skipping this test."
exit 77
fi
# If compression or decompression support is missing, this test is skipped.
# This isn't perfect because it does not specifically check for LZMA1/2
# filters. Many of the other tests also assume LZMA1/2 support if encoders
# or decoders are enabled.
if test ! -f ../config.h ; then
:
elif grep 'define HAVE_ENCODERS' ../config.h > /dev/null \
&& grep 'define HAVE_DECODERS' ../config.h > /dev/null ; then
:
else
echo "Compression or decompression support is disabled, skipping this test."
exit 77
fi
# Create temporary input file. The file contents are not important.
SUFFIX_INPUT="suffix_temp"
SUFFIX_INPUT_FILES="$SUFFIX_INPUT"_files
SUFFIX_INPUT_FILES0="$SUFFIX_INPUT"_files0
# Remove possible leftover temporary files
rm -f \
"$SUFFIX_INPUT" \
"$SUFFIX_INPUT.foo" \
"$SUFFIX_INPUT_FILES" \
"$SUFFIX_INPUT_FILES"
echo "foobar" > "$SUFFIX_INPUT"
# Test basic suffix when compressing with raw format.
if "$XZ" -zfk --suffix=".foo" -Fraw --lzma1=preset=0 "$SUFFIX_INPUT" ; then
:
else
echo "Failed to compress a file with a suffix set in raw format"
exit 1
fi
# Test the output file is named properly.
if test -f "$SUFFIX_INPUT.foo" ; then
:
else
echo "Raw format compressed output file not named properly"
exit 1
fi
# Expect an error when compressing with raw format without a suffix
if "$XZ" -zfk -Fraw --lzma1=preset=0 "$SUFFIX_INPUT" 2> /dev/null; then
echo "Error not reported when compressing in raw format without a suffix"
exit 1
fi
# Expect an error when decompressing with raw format without a suffix
if "$XZ" -df -Fraw --lzma1=preset=0 "$SUFFIX_INPUT.foo" 2> /dev/null; then
echo "Error not reported when decompressing in raw format without a suffix"
exit 1
fi
# Test basic decompression with raw format and a suffix. This will also
# delete $SUFFIX_INPUT.foo
if "$XZ" -df --suffix=".foo" -Fraw --lzma1=preset=0 "$SUFFIX_INPUT.foo"; then
:
else
echo "Failed to decompress a file with a suffix set in raw format"
exit 1
fi
# Test basic compression with .xz format and a suffix
if "$XZ" -zfk --suffix=".foo" --lzma2=preset=0 "$SUFFIX_INPUT" ; then
:
else
echo "Failed to compress a file with a suffix set in .xz format"
exit 1
fi
# Test the output file is named properly.
if test -f "$SUFFIX_INPUT.foo" ; then
:
else
echo ".xz format compressed output file named properly"
exit 1
fi
# This will delete $SUFFIX_INPUT.foo
if "$XZ" -df --suffix=".foo" "$SUFFIX_INPUT.foo"; then
:
else
echo "Failed to decompress a file with a suffix set in .xz format"
exit 1
fi
# Test reading from stdin in raw mode. This was broken in
# cc5aa9ab138beeecaee5a1e81197591893ee9ca0 and fixed in
# 837ea40b1c9d4998cac4500b55171bf33e0c31a6
if echo foo | "$XZ" -Fraw --lzma1=preset=0 > /dev/null ; then
:
else
echo "Implicit write to stdout not detected"
exit 1
fi
# Create two temporary files to be used with --files and --files0.
printf "$SUFFIX_INPUT\n" > "$SUFFIX_INPUT_FILES"
printf "$SUFFIX_INPUT\0" > "$SUFFIX_INPUT_FILES0"
# Test proper handling of --files/--files0 when no suffix is set. This
# must result in an error because xz does not know how to rename the output
# file from the input files. This caused a segmentation fault due to a
# mistake in f481523baac946fa3bc13d79186ffaf0c0b818a7, which was fixed by
# 0a601ddc89fd7e1370807c6b58964f361dfcd34a.
if "$XZ" -Fraw --lzma1=preset=0 --files="$SUFFIX_INPUT_FILES" 2> /dev/null ; then
echo "Failed to report error when compressing a file specified by --files in raw mode without a suffix"
exit 1
fi
if "$XZ" -Fraw --lzma1=preset=0 --files0="$SUFFIX_INPUT_FILES0" 2> /dev/null ; then
echo "Failed to report error when compressing a file specified by --files0 in raw mode without a suffix"
exit 1
fi
# Test proper suffix usage in raw mode with --files and --files0.
if "$XZ" -zfk -Fraw --lzma1=preset=0 --suffix=.foo --files="$SUFFIX_INPUT_FILES" ; then
:
else
echo "Error compressing a file specified by --files in raw mode with a suffix set"
exit 1
fi
if test -f "$SUFFIX_INPUT.foo" ; then
:
else
echo "Entry processed by --files not named properly"
exit 1
fi
# Remove the artifact so we can be sure the next test executes properly.
rm "$SUFFIX_INPUT.foo"
if "$XZ" -zfk -Fraw --lzma1=preset=0 --suffix=.foo --files0="$SUFFIX_INPUT_FILES0" ; then
:
else
echo "Error compressing a file specified by --files0 in raw mode with a suffix set"
exit 1
fi
if test -f "$SUFFIX_INPUT.foo" ; then
:
else
echo "Entry processed by --files0 not named properly"
exit 1
fi
# When the file type cannot be determined by xz, it will copy the contents
# of the file only if -c,--stdout is used. This was broken by
# 837ea40b1c9d4998cac4500b55171bf33e0c31a6 and fixed by
# f481523baac946fa3bc13d79186ffaf0c0b818a7.
if echo foo | "$XZ" -df > /dev/null 2>&1; then
echo "Failed to report error when decompressing unknown file type without -c,--stdout"
exit 1
fi
if echo foo | "$XZ" -dfc > /dev/null; then
:
else
echo "Failed to copy input to standard out when decompressing unknown file type with -c,--stdout"
exit 1
fi
# Remove remaining test artifacts
rm -f \
"$SUFFIX_INPUT" \
"$SUFFIX_INPUT.foo" \
"$SUFFIX_INPUT_FILES" \
"$SUFFIX_INPUT_FILES0"
|