From 356d50f043d1c19b4bd4a04d487eaa4405fd1bcb Mon Sep 17 00:00:00 2001 From: Christoph Herzog Date: Sun, 15 Sep 2024 07:28:31 +0200 Subject: [PATCH] tests: Add WasiRunner file system mounting tests --- lib/wasix/src/runners/wasi.rs | 88 ++++++++++++++++++ ...-tests--volume-static-webserver@0.1.0.webc | Bin 0 -> 4634 bytes 2 files changed, 88 insertions(+) create mode 100644 tests/integration/cli/tests/webc/wasmer-tests--volume-static-webserver@0.1.0.webc diff --git a/lib/wasix/src/runners/wasi.rs b/lib/wasix/src/runners/wasi.rs index 7713b80f6d2..9837b4a2102 100644 --- a/lib/wasix/src/runners/wasi.rs +++ b/lib/wasix/src/runners/wasi.rs @@ -448,4 +448,92 @@ mod tests { assert_send::(); assert_sync::(); } + + #[tokio::test] + async fn test_volume_mount_without_webcs() { + use std::sync::Arc; + + let root_fs = virtual_fs::RootFileSystemBuilder::new().build(); + + let tokrt = tokio::runtime::Handle::current(); + + let hostdir = virtual_fs::host_fs::FileSystem::new(tokrt.clone(), "/").unwrap(); + let hostdir_dyn: Arc = Arc::new(hostdir); + + root_fs + .mount("/host".into(), &hostdir_dyn, "/".into()) + .unwrap(); + + let envb = crate::runners::wasi::WasiRunner::new(); + + let annotations = webc::metadata::annotations::Wasi::new("test"); + + let tm = Arc::new(crate::runtime::task_manager::tokio::TokioTaskManager::new( + tokrt.clone(), + )); + let rt = crate::PluggableRuntime::new(tm); + + let envb = envb + .prepare_webc_env("test", &annotations, None, Arc::new(rt), Some(root_fs)) + .unwrap(); + + let init = envb.build_init().unwrap(); + + let fs = &init.state.fs.root_fs; + + fs.read_dir(&std::path::Path::new("/host")).unwrap(); + } + + #[tokio::test] + async fn test_volume_mount_with_webcs() { + use std::sync::Arc; + + let root_fs = virtual_fs::RootFileSystemBuilder::new().build(); + + let tokrt = tokio::runtime::Handle::current(); + + let hostdir = virtual_fs::host_fs::FileSystem::new(tokrt.clone(), "/").unwrap(); + let hostdir_dyn: Arc = Arc::new(hostdir); + + root_fs + .mount("/host".into(), &hostdir_dyn, "/".into()) + .unwrap(); + + let envb = crate::runners::wasi::WasiRunner::new(); + + let annotations = webc::metadata::annotations::Wasi::new("test"); + + let tm = Arc::new(crate::runtime::task_manager::tokio::TokioTaskManager::new( + tokrt.clone(), + )); + let mut rt = crate::PluggableRuntime::new(tm); + rt.set_package_loader(crate::runtime::package_loader::BuiltinPackageLoader::new()); + + let webc_path = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()).join("../../tests/integration/cli/tests/webc/wasmer-tests--volume-static-webserver@0.1.0.webc"); + let webc_data = std::fs::read(webc_path).unwrap(); + let container = webc::Container::from_bytes(webc_data).unwrap(); + + let binpkg = crate::bin_factory::BinaryPackage::from_webc(&container, &rt) + .await + .unwrap(); + + let mut envb = envb + .prepare_webc_env( + "test", + &annotations, + Some(&binpkg), + Arc::new(rt), + Some(root_fs), + ) + .unwrap(); + + envb = envb.preopen_dir("/host").unwrap(); + + let init = envb.build_init().unwrap(); + + let fs = &init.state.fs.root_fs; + + fs.read_dir(&std::path::Path::new("/host")).unwrap(); + fs.read_dir(&std::path::Path::new("/settings")).unwrap(); + } } diff --git a/tests/integration/cli/tests/webc/wasmer-tests--volume-static-webserver@0.1.0.webc b/tests/integration/cli/tests/webc/wasmer-tests--volume-static-webserver@0.1.0.webc new file mode 100644 index 0000000000000000000000000000000000000000..ca28cc71e5dd45fc1ba9c7925f23eeb02fa9690d GIT binary patch literal 4634 zcmcIoZEPGz8E!s+_Gm#x6;0G89o^9;F`nDA)1;PLquNf=AneAqoune9&D`$n-q^c4 zo0-|WbCVW`1VX5gN~H>EL8Wdae$Yk;@gosR#79t(kRm{ZKM1t~eu0qqEK;ci?>oDD zK7U~&760(%zHXv@jN^+WwvhI>xMku zy5Y+Wx53?6oksJnVSy~ZQQctud-n1s3se3m>3iq&c6I5!pTGHsKm7yQ_s8D&%`IDB zPp*9E(hq+7`jy+hevUIEBfVI~rfaBT%M@1DM+2mX5I&#wec8Kx1}^TN^G7!e0c)NTHl_2`z#_37L6fm?qrX3mXYr~iEG zxs#Vg-(QYgKhf{~`l+|;-)c-94jK_R%wvWvcIwt=tW#fHpOQD8J~6F7^XaF0qRn?b zcI}Z*T>09Ov)}yWZ;r)-2VUIvs`{JIB8Ztu6}QokJ6~xmW1a>7!7P#g&;J|NOz(zF z{RKDG{H6Am7Sj<|4nWBWmjdRf=Bmk6`;OI49(=4XNSHgz0zU7xSQ34s?(5IK?D$>_oeg6WJ?J=C0#&I3 zCp&P!Br(h4SfaHu2G}52=RK2Sfmd99+@bxU^jrktbW(T{V&c3sF?<@4Vs zUwiw~0KNXFr@!~XtuMdvqw(6v_tR%CKJYX00H4@$-#IY04opTRfI^0(!I{UEF1bjh;44yTP6b}0QeGIB8VP(+ zf+hmYOHe4q^WvNPQ6EX55_PFU9+rj=l8^g@5yeBOkS2#S(;z|u-hibz_Ap{7>dur{B3=cUu3+}<` z=?SNwe3VR&O@Uch%>8iFXQAfBcWOdSU2el%E-#|a@;Q`S5H(diGiZs7g#%jTE|e|{ z@yl{%itUMZ5}Rx6l3~x0SEKeWNtsilhbE^0E>ql1l`wOid{&6gNlTMiA+A)KvM`h_ zDwP1ZSkVPO_7zbkq0l%5OP#pWoC20~;bIvB(STE61VtWS&J9X2twW?Q2i9@{h(qXF z#Fr{!W(5)10Y)TCd=`um=$$SZP7zQrHf%G7h}Mxz8IX~o@biEOIq`Vb;{mR95qs!u zh4^0gy`xgiS`;cM6>lS6Sh zmt$u#&C&#$0aQM2N`z?uUvYH`Xu`!l*UFgfJ_VGHp`~NYYobqHF^#Zc5(qgC2m*T< zEED1hTU2BxZ?hnWl^quA$S4#TrLKhZ|KDD)#QK-PaFV?gw1DVe0Xzw7yRwQuO^;RiR{F(c|0| zVgdkwM#$UHyIdH$IM#N0(irYx#jH15Nzgl!@Srz|gI?jv-az=>xvRdLu3*)X!;@ps z;|Q3^zAE^KnVAKUKoWM>aAvJX z)e=-KQB%A~EPK7F#@sFm9ew>4-MRNI81YbY%ZqQZMcK6#t88hyme}Pm4X?i1@fkD= z8CT&ScwZrh5`3>=Aq<-=1GxTGI^R}_%zv?CW*s@uEuDqm=KqLLCIt%)!YYJgdT|<> z*{R*QY}PAeBsBzvAa0LkWGd&o5!9-I0ixkV=xVhJf^faU64MMiS~YKNRTxIrdAMUY z)ND2sOR8Z=1m4~uqe|hwv_HfEwi~}M;*5JC1xxZiWhR3 Xo7egUfaNb9H|C$kuMY3}yWM{PLKf;w literal 0 HcmV?d00001