Skip to content

Commit 4817c68

Browse files
committed
Ensure libvirt readonly tests have a shared version check
Signed-off-by: Colin Walters <walters@verbum.org>
1 parent 076b434 commit 4817c68

1 file changed

Lines changed: 41 additions & 26 deletions

File tree

crates/integration-tests/src/tests/libvirt_verb.rs

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,38 @@ fn cleanup_domain(domain_name: &str) {
480480
}
481481
}
482482

483+
/// Check if libvirt supports readonly virtiofs (requires libvirt 11.0+)
484+
/// Returns true if supported, false if not supported
485+
fn check_libvirt_supports_readonly_virtiofs() -> Result<bool> {
486+
let bck = get_bck_command()?;
487+
488+
println!("Checking libvirt capabilities...");
489+
let status_output = Command::new(&bck)
490+
.args(&["libvirt", "status", "--format", "json"])
491+
.output()
492+
.expect("Failed to get libvirt status");
493+
494+
if !status_output.status.success() {
495+
let stderr = String::from_utf8_lossy(&status_output.stderr);
496+
panic!("Failed to get libvirt status: {}", stderr);
497+
}
498+
499+
let status: serde_json::Value =
500+
serde_json::from_slice(&status_output.stdout).expect("Failed to parse libvirt status JSON");
501+
502+
let supports_readonly = status["supports_readonly_virtiofs"]
503+
.as_bool()
504+
.expect("Missing supports_readonly_virtiofs field in status output");
505+
506+
if !supports_readonly {
507+
println!("Skipping test: libvirt does not support readonly virtiofs");
508+
println!("libvirt version: {:?}", status["version"]);
509+
println!("Requires libvirt 11.0+ for readonly virtiofs support");
510+
}
511+
512+
Ok(supports_readonly)
513+
}
514+
483515
/// Wait for SSH to become available on a domain with a timeout
484516
fn wait_for_ssh_available(
485517
domain_name: &str,
@@ -636,35 +668,13 @@ static TEST_LIBVIRT_RUN_BIND_STORAGE_RO: IntegrationTest = IntegrationTest::new(
636668

637669
/// Test container storage binding functionality end-to-end
638670
fn test_libvirt_run_bind_storage_ro() -> Result<()> {
639-
let bck = get_bck_command()?;
640-
let test_image = get_test_image();
641-
642-
// First check if libvirt supports readonly virtiofs
643-
println!("Checking libvirt capabilities...");
644-
let status_output = Command::new(&bck)
645-
.args(&["libvirt", "status", "--format", "json"])
646-
.output()
647-
.expect("Failed to get libvirt status");
648-
649-
if !status_output.status.success() {
650-
let stderr = String::from_utf8_lossy(&status_output.stderr);
651-
panic!("Failed to get libvirt status: {}", stderr);
652-
}
653-
654-
let status: serde_json::Value =
655-
serde_json::from_slice(&status_output.stdout).expect("Failed to parse libvirt status JSON");
656-
657-
let supports_readonly = status["supports_readonly_virtiofs"]
658-
.as_bool()
659-
.expect("Missing supports_readonly_virtiofs field in status output");
660-
661-
if !supports_readonly {
662-
println!("Skipping test: libvirt does not support readonly virtiofs");
663-
println!("libvirt version: {:?}", status["version"]);
664-
println!("Requires libvirt 11.0+ for readonly virtiofs support");
671+
// Check if libvirt supports readonly virtiofs (requires libvirt 11.0+)
672+
if !check_libvirt_supports_readonly_virtiofs()? {
665673
return Ok(());
666674
}
667675

676+
let test_image = get_test_image();
677+
668678
// Generate unique domain name for this test
669679
let domain_name = format!(
670680
"test-bind-storage-{}",
@@ -1159,6 +1169,11 @@ fn test_libvirt_run_bind_mounts() -> Result<()> {
11591169
use std::fs;
11601170
use tempfile::TempDir;
11611171

1172+
// Check if libvirt supports readonly virtiofs (requires libvirt 11.0+)
1173+
if !check_libvirt_supports_readonly_virtiofs()? {
1174+
return Ok(());
1175+
}
1176+
11621177
let test_image = get_test_image();
11631178

11641179
// Generate unique domain name for this test

0 commit comments

Comments
 (0)