update
This commit is contained in:
Executable
+190
@@ -0,0 +1,190 @@
|
||||
#!/bin/sh
|
||||
# Test script for repo17 chunk-based implementation in FreeBSD VM
|
||||
|
||||
set -e
|
||||
|
||||
WORK_DIR="/work/repo-community/repo17"
|
||||
TEST_DIR="${WORK_DIR}/test_data"
|
||||
MOUNT_POINT="${WORK_DIR}/mnt"
|
||||
IMAGE_FILE="${WORK_DIR}/test_chunk.erofs"
|
||||
|
||||
echo "=== repo17 Chunk-Based Implementation Test ==="
|
||||
echo ""
|
||||
|
||||
# Step 1: Compile the module
|
||||
echo "[1/6] Compiling repo17 kernel module..."
|
||||
cd "${WORK_DIR}/src"
|
||||
make clean > /dev/null 2>&1 || true
|
||||
if ! make; then
|
||||
echo "❌ Module compilation failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Module compiled successfully"
|
||||
echo ""
|
||||
|
||||
# Step 2: Prepare test data
|
||||
echo "[2/6] Preparing test data..."
|
||||
rm -rf "${TEST_DIR}"
|
||||
mkdir -p "${TEST_DIR}"
|
||||
|
||||
# Create regular.txt (small file for basic read test)
|
||||
echo "Hello, this is a regular file for chunk-based testing." > "${TEST_DIR}/regular.txt"
|
||||
echo "Line 2 of the regular file." >> "${TEST_DIR}/regular.txt"
|
||||
echo "Line 3 of the regular file." >> "${TEST_DIR}/regular.txt"
|
||||
|
||||
# Create large.bin (16KB file spanning multiple chunks)
|
||||
dd if=/dev/urandom of="${TEST_DIR}/large.bin" bs=1024 count=16 2>/dev/null
|
||||
|
||||
# Create medium.dat (cross chunk boundary - 6KB)
|
||||
dd if=/dev/urandom of="${TEST_DIR}/medium.dat" bs=1024 count=6 2>/dev/null
|
||||
|
||||
# Create small.txt (smaller than chunk size)
|
||||
echo "Small file content" > "${TEST_DIR}/small.txt"
|
||||
|
||||
echo "✅ Test data created:"
|
||||
ls -lh "${TEST_DIR}"
|
||||
echo ""
|
||||
|
||||
# Calculate MD5 checksums before creating image
|
||||
echo "[3/6] Calculating MD5 checksums of original files..."
|
||||
cd "${TEST_DIR}"
|
||||
md5 regular.txt > "${WORK_DIR}/md5sums_original.txt"
|
||||
md5 large.bin >> "${WORK_DIR}/md5sums_original.txt"
|
||||
md5 medium.dat >> "${WORK_DIR}/md5sums_original.txt"
|
||||
md5 small.txt >> "${WORK_DIR}/md5sums_original.txt"
|
||||
cat "${WORK_DIR}/md5sums_original.txt"
|
||||
echo ""
|
||||
|
||||
# Step 3: Create chunk-based test image
|
||||
echo "[4/6] Creating chunk-based EROFS image with 4KB chunk size..."
|
||||
rm -f "${IMAGE_FILE}"
|
||||
if ! mkfs.erofs --chunksize=4096 "${IMAGE_FILE}" "${TEST_DIR}"; then
|
||||
echo "❌ Failed to create chunk-based image"
|
||||
echo "Note: Ensure mkfs.erofs supports --chunksize option"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Chunk-based image created: ${IMAGE_FILE}"
|
||||
ls -lh "${IMAGE_FILE}"
|
||||
echo ""
|
||||
|
||||
# Step 4: Load module and mount
|
||||
echo "[5/6] Loading module and mounting image..."
|
||||
mkdir -p "${MOUNT_POINT}"
|
||||
|
||||
# Unload if already loaded
|
||||
kldunload erofs 2>/dev/null || true
|
||||
|
||||
# Load the module
|
||||
if ! kldload "${WORK_DIR}/src/erofs.ko"; then
|
||||
echo "❌ Failed to load kernel module"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Kernel module loaded"
|
||||
|
||||
# Create memory disk
|
||||
MD_DEV=$(mdconfig -a -t vnode -f "${IMAGE_FILE}")
|
||||
if [ -z "${MD_DEV}" ]; then
|
||||
echo "❌ Failed to create memory disk"
|
||||
kldunload erofs
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Memory disk created: /dev/${MD_DEV}"
|
||||
|
||||
# Mount the image
|
||||
if ! mount -t erofs "/dev/${MD_DEV}" "${MOUNT_POINT}"; then
|
||||
echo "❌ Mount failed"
|
||||
mdconfig -d -u "${MD_DEV}"
|
||||
kldunload erofs
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ Image mounted at ${MOUNT_POINT}"
|
||||
echo ""
|
||||
|
||||
# Step 5: Verify file reading
|
||||
echo "[6/6] Verifying chunk-based file reading..."
|
||||
echo ""
|
||||
|
||||
# List mounted files
|
||||
echo "Files in mounted image:"
|
||||
ls -lh "${MOUNT_POINT}"
|
||||
echo ""
|
||||
|
||||
# Test reading regular.txt
|
||||
echo "--- Testing regular.txt (small file) ---"
|
||||
if cat "${MOUNT_POINT}/regular.txt" > /dev/null 2>&1; then
|
||||
echo "✅ Read successful"
|
||||
cat "${MOUNT_POINT}/regular.txt"
|
||||
else
|
||||
echo "❌ Read failed"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Test reading large.bin (spans multiple chunks)
|
||||
echo "--- Testing large.bin (multiple chunks) ---"
|
||||
if dd if="${MOUNT_POINT}/large.bin" of=/dev/null bs=1024 2>&1 | grep -q "16+0"; then
|
||||
echo "✅ Read successful (16KB across chunks)"
|
||||
else
|
||||
echo "❌ Read failed"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Test reading medium.dat (crosses chunk boundary)
|
||||
echo "--- Testing medium.dat (chunk boundary) ---"
|
||||
if dd if="${MOUNT_POINT}/medium.dat" of=/dev/null bs=1024 2>&1 | grep -q "6+0"; then
|
||||
echo "✅ Read successful (6KB crossing boundary)"
|
||||
else
|
||||
echo "❌ Read failed"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Test reading small.txt
|
||||
echo "--- Testing small.txt (< chunk size) ---"
|
||||
if cat "${MOUNT_POINT}/small.txt" > /dev/null 2>&1; then
|
||||
echo "✅ Read successful"
|
||||
cat "${MOUNT_POINT}/small.txt"
|
||||
else
|
||||
echo "❌ Read failed"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# MD5 verification
|
||||
echo "=== MD5 Checksum Verification ==="
|
||||
cd "${MOUNT_POINT}"
|
||||
md5 regular.txt > "${WORK_DIR}/md5sums_mounted.txt"
|
||||
md5 large.bin >> "${WORK_DIR}/md5sums_mounted.txt"
|
||||
md5 medium.dat >> "${WORK_DIR}/md5sums_mounted.txt"
|
||||
md5 small.txt >> "${WORK_DIR}/md5sums_mounted.txt"
|
||||
|
||||
echo "Original checksums:"
|
||||
cat "${WORK_DIR}/md5sums_original.txt"
|
||||
echo ""
|
||||
echo "Mounted checksums:"
|
||||
cat "${WORK_DIR}/md5sums_mounted.txt"
|
||||
echo ""
|
||||
|
||||
if diff "${WORK_DIR}/md5sums_original.txt" "${WORK_DIR}/md5sums_mounted.txt" > /dev/null 2>&1; then
|
||||
echo "✅ All MD5 checksums match!"
|
||||
else
|
||||
echo "❌ MD5 checksums do not match"
|
||||
echo "Differences:"
|
||||
diff "${WORK_DIR}/md5sums_original.txt" "${WORK_DIR}/md5sums_mounted.txt" || true
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Cleanup
|
||||
echo "=== Cleanup ==="
|
||||
umount "${MOUNT_POINT}"
|
||||
mdconfig -d -u "${MD_DEV}"
|
||||
kldunload erofs
|
||||
echo "✅ Cleanup complete"
|
||||
echo ""
|
||||
|
||||
echo "=== Test Summary ==="
|
||||
echo "✅ Module compilation: PASSED"
|
||||
echo "✅ Image creation: PASSED"
|
||||
echo "✅ Module load: PASSED"
|
||||
echo "✅ Mount: PASSED"
|
||||
echo "✅ Chunk-based file reading: PASSED"
|
||||
echo "✅ MD5 verification: PASSED"
|
||||
echo ""
|
||||
echo "All tests completed successfully!"
|
||||
Reference in New Issue
Block a user