#!/usr/bin/env bash # test_process_substitution.bash # Test zstd's support for process substitution with --filelist # Process arguments ZSTD_PATH="zstd" # Default to using zstd from PATH if [ $# -ge 1 ]; then ZSTD_PATH="$1" fi echo "Using zstd executable: $ZSTD_PATH" set -e # Exit on error # Set up test directory and files echo "Setting up test environment..." TEST_DIR="tmp_process_substit" rm -rf "$TEST_DIR" mkdir -p "$TEST_DIR" echo "Content of file 1" > "$TEST_DIR/file1.txt" echo "Content of file 2" > "$TEST_DIR/file2.txt" echo "Content of file 3" > "$TEST_DIR/file3.txt" # Clean up any previous test artifacts rm -f "$TEST_DIR/output.zst" "$TEST_DIR/output_echo.zst" "$TEST_DIR/output_cat.zst" rm -rf "$TEST_DIR/extracted" mkdir -p "$TEST_DIR/extracted" echo "=== Testing process substitution with --filelist ===" # Test 1: Basic process substitution with find echo "Test 1: Basic process substitution (find command)" "$ZSTD_PATH" --filelist=<(find "$TEST_DIR" -name "*.txt" | sort) -c > "$TEST_DIR/output.zst" if [ -f "$TEST_DIR/output.zst" ]; then echo "✓ Test 1 PASSED: Output file was created" else echo "✗ Test 1 FAILED: Output file was not created" exit 1 fi # Test 2: Process substitution with echo echo "Test 2: Process substitution (echo command)" "$ZSTD_PATH" --filelist=<(echo -e "$TEST_DIR/file1.txt\n$TEST_DIR/file2.txt") -c > "$TEST_DIR/output_echo.zst" if [ -f "$TEST_DIR/output_echo.zst" ]; then echo "✓ Test 2 PASSED: Output file was created" else echo "✗ Test 2 FAILED: Output file was not created" exit 1 fi # Test 3: Process substitution with cat echo "Test 3: Process substitution (cat command)" echo -e "$TEST_DIR/file1.txt\n$TEST_DIR/file3.txt" > "$TEST_DIR/filelist.txt" "$ZSTD_PATH" --filelist=<(cat "$TEST_DIR/filelist.txt") -c > "$TEST_DIR/output_cat.zst" if [ -f "$TEST_DIR/output_cat.zst" ]; then echo "✓ Test 3 PASSED: Output file was created" else echo "✗ Test 3 FAILED: Output file was not created" exit 1 fi # Test 4: Verify contents of archives echo "Test 4: Verifying archive contents" "$ZSTD_PATH" -d "$TEST_DIR/output.zst" -o "$TEST_DIR/extracted/combined.out" if grep -q "Content of file 1" "$TEST_DIR/extracted/combined.out" && grep -q "Content of file 2" "$TEST_DIR/extracted/combined.out" && grep -q "Content of file 3" "$TEST_DIR/extracted/combined.out"; then echo "✓ Test 4 PASSED: All files were correctly archived and extracted" else echo "✗ Test 4 FAILED: Not all expected content was found in the extracted file" exit 1 fi # Test 5: Edge case with empty list echo "Test 5: Process substitution with empty input" "$ZSTD_PATH" --filelist=<(echo "") -c > "$TEST_DIR/output_empty.zst" 2>/dev/null || true if [ -f "$TEST_DIR/output_empty.zst" ]; then echo "✓ Test 5 PASSED: Handled empty input gracefully" else echo "✓ Test 5 PASSED: Properly rejected empty input" fi # cleanup rm -rf "$TEST_DIR" echo "All tests completed successfully!"