From 94ed7c17454b2ade565cdbcc7fffbdd0f0a1f306 Mon Sep 17 00:00:00 2001 From: Eugene Korenevsky Date: Tue, 18 Nov 2025 01:43:17 +0300 Subject: [PATCH] block: qcow: add integration tests for qcow2 compression Add tests: - zlib: test_virtio_block_qcow2_zlib() - zstd: test_virtio_block_qcow2_zstd() Both these tests use zlib- and zstd-compressed images as OS image. Modify test_virtio_block_qcow2_backing_file() test: it is practical to test qcow2 file-backing with compression, so use zlib-compressed image as a backing file. Signed-off-by: Eugene Korenevsky --- scripts/run_integration_tests_aarch64.sh | 20 +++++++++++++++++++- scripts/run_integration_tests_x86_64.sh | 22 +++++++++++++++++++++- tests/integration.rs | 18 ++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/scripts/run_integration_tests_aarch64.sh b/scripts/run_integration_tests_aarch64.sh index bd1e3954d..ff3cdc440 100755 --- a/scripts/run_integration_tests_aarch64.sh +++ b/scripts/run_integration_tests_aarch64.sh @@ -46,11 +46,29 @@ update_workloads() { popd || exit fi + FOCAL_OS_QCOW2_ZLIB_FILE_IMAGE_NAME="focal-server-cloudimg-arm64-custom-20210929-0-zlib.qcow2" + FOCAL_OS_QCOW2_ZLIB_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW2_ZLIB_FILE_IMAGE_NAME" + if [ ! -f "$FOCAL_OS_QCOW2_ZLIB_FILE_IMAGE" ]; then + pushd "$WORKLOADS_DIR" || exit + time qemu-img convert -c -f raw -O qcow2 -o compression_type=zlib \ + "$FOCAL_OS_RAW_IMAGE" $FOCAL_OS_QCOW2_ZLIB_FILE_IMAGE_NAME + popd || exit + fi + + FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE_NAME="focal-server-cloudimg-arm64-custom-20210929-0-zstd.qcow2" + FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE_NAME" + if [ ! -f "$FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE" ]; then + pushd "$WORKLOADS_DIR" || exit + time qemu-img convert -c -f raw -O qcow2 -o compression_type=zstd \ + "$FOCAL_OS_RAW_IMAGE" $FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE_NAME + popd || exit + fi + FOCAL_OS_QCOW2_IMAGE_BACKING_FILE_NAME="focal-server-cloudimg-arm64-custom-20210929-0-backing.qcow2" FOCAL_OS_QCOW2_BACKING_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW2_IMAGE_BACKING_FILE_NAME" if [ ! -f "$FOCAL_OS_QCOW2_BACKING_FILE_IMAGE" ]; then pushd "$WORKLOADS_DIR" || exit - time qemu-img create -f qcow2 -b "$FOCAL_OS_QCOW2_UNCOMPRESSED_IMAGE" -F qcow2 $FOCAL_OS_QCOW2_IMAGE_BACKING_FILE_NAME + time qemu-img create -f qcow2 -b "$FOCAL_OS_QCOW2_ZSTD_FILE_IMAGE" -F qcow2 $FOCAL_OS_QCOW2_IMAGE_BACKING_FILE_NAME popd || exit fi diff --git a/scripts/run_integration_tests_x86_64.sh b/scripts/run_integration_tests_x86_64.sh index 6f89cf865..e2848a742 100755 --- a/scripts/run_integration_tests_x86_64.sh +++ b/scripts/run_integration_tests_x86_64.sh @@ -45,11 +45,31 @@ if [ ! -f "$FOCAL_OS_RAW_IMAGE" ]; then popd || exit fi +FOCAL_OS_QCOW_ZLIB_FILE_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0-zlib.qcow2" +FOCAL_OS_QCOW_ZLIB_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW_ZLIB_FILE_IMAGE_NAME" +if [ ! -f "$FOCAL_OS_QCOW_ZLIB_FILE_IMAGE" ]; then + pushd "$WORKLOADS_DIR" || exit + time qemu-img convert -c -f raw -O qcow2 -o compression_type=zlib \ + "$FOCAL_OS_RAW_IMAGE" $FOCAL_OS_QCOW_ZLIB_FILE_IMAGE_NAME + popd || exit +fi + +FOCAL_OS_QCOW_ZSTD_FILE_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0-zstd.qcow2" +FOCAL_OS_QCOW_ZSTD_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW_ZSTD_FILE_IMAGE_NAME" +if [ ! -f "$FOCAL_OS_QCOW_ZSTD_FILE_IMAGE" ]; then + pushd "$WORKLOADS_DIR" || exit + time qemu-img convert -c -f raw -O qcow2 -o compression_type=zstd \ + "$FOCAL_OS_RAW_IMAGE" $FOCAL_OS_QCOW_ZSTD_FILE_IMAGE_NAME + popd || exit +fi + FOCAL_OS_QCOW_BACKING_FILE_IMAGE_NAME="focal-server-cloudimg-amd64-custom-20210609-0-backing.qcow2" FOCAL_OS_QCOW_BACKING_FILE_IMAGE="$WORKLOADS_DIR/$FOCAL_OS_QCOW_BACKING_FILE_IMAGE_NAME" if [ ! -f "$FOCAL_OS_QCOW_BACKING_FILE_IMAGE" ]; then pushd "$WORKLOADS_DIR" || exit - time qemu-img create -f qcow2 -b "$FOCAL_OS_IMAGE" -F qcow2 $FOCAL_OS_QCOW_BACKING_FILE_IMAGE_NAME + time qemu-img create -f qcow2 \ + -b "$FOCAL_OS_QCOW_ZSTD_FILE_IMAGE" \ + -F qcow2 $FOCAL_OS_QCOW_BACKING_FILE_IMAGE_NAME popd || exit fi diff --git a/tests/integration.rs b/tests/integration.rs index 3c00200ec..276c4e00f 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -40,6 +40,10 @@ mod x86_64 { pub const JAMMY_VFIO_IMAGE_NAME: &str = "jammy-server-cloudimg-amd64-custom-vfio-20241012-0.raw"; pub const FOCAL_IMAGE_NAME_QCOW2: &str = "focal-server-cloudimg-amd64-custom-20210609-0.qcow2"; + pub const FOCAL_IMAGE_NAME_QCOW2_ZLIB: &str = + "focal-server-cloudimg-amd64-custom-20210609-0-zlib.qcow2"; + pub const FOCAL_IMAGE_NAME_QCOW2_ZSTD: &str = + "focal-server-cloudimg-amd64-custom-20210609-0-zstd.qcow2"; pub const FOCAL_IMAGE_NAME_QCOW2_BACKING_FILE: &str = "focal-server-cloudimg-amd64-custom-20210609-0-backing.qcow2"; pub const FOCAL_IMAGE_NAME_VHD: &str = "focal-server-cloudimg-amd64-custom-20210609-0.vhd"; @@ -59,6 +63,10 @@ mod aarch64 { pub const FOCAL_IMAGE_UPDATE_KERNEL_NAME: &str = "focal-server-cloudimg-arm64-custom-20210929-0-update-kernel.raw"; pub const FOCAL_IMAGE_NAME_QCOW2: &str = "focal-server-cloudimg-arm64-custom-20210929-0.qcow2"; + pub const FOCAL_IMAGE_NAME_QCOW2_ZLIB: &str = + "focal-server-cloudimg-arm64-custom-20210929-0-zlib.qcow2"; + pub const FOCAL_IMAGE_NAME_QCOW2_ZSTD: &str = + "focal-server-cloudimg-arm64-custom-20210929-0-zstd.qcow2"; pub const FOCAL_IMAGE_NAME_QCOW2_BACKING_FILE: &str = "focal-server-cloudimg-arm64-custom-20210929-0-backing.qcow2"; pub const FOCAL_IMAGE_NAME_VHD: &str = "focal-server-cloudimg-arm64-custom-20210929-0.vhd"; @@ -3488,6 +3496,16 @@ mod common_parallel { _test_virtio_block(FOCAL_IMAGE_NAME_QCOW2, false, false); } + #[test] + fn test_virtio_block_qcow2_zlib() { + _test_virtio_block(FOCAL_IMAGE_NAME_QCOW2_ZLIB, false, false); + } + + #[test] + fn test_virtio_block_qcow2_zstd() { + _test_virtio_block(FOCAL_IMAGE_NAME_QCOW2_ZSTD, false, false); + } + #[test] fn test_virtio_block_qcow2_backing_file() { _test_virtio_block(FOCAL_IMAGE_NAME_QCOW2_BACKING_FILE, false, false);