mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Auto merge of #3848 - tiif:tokiotest, r=RalfJung
Add tokio io test After #3804 landed, these tests passed.
This commit is contained in:
commit
79115f538a
@ -44,6 +44,12 @@ version = "3.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.1.7"
|
||||
@ -304,6 +310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"pin-project-lite",
|
||||
|
@ -20,7 +20,7 @@ tempfile = "3"
|
||||
page_size = "0.6"
|
||||
# Avoid pulling in all of tokio's dependencies.
|
||||
# However, without `net` and `signal`, tokio uses fewer relevant system APIs.
|
||||
tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "time", "net", "fs", "sync", "signal"] }
|
||||
tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "time", "net", "fs", "sync", "signal", "io-util"] }
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
windows-sys = { version = "0.52", features = [ "Win32_Foundation", "Win32_System_Threading" ] }
|
||||
|
41
src/tools/miri/tests/pass-dep/tokio/file-io.rs
Normal file
41
src/tools/miri/tests/pass-dep/tokio/file-io.rs
Normal file
@ -0,0 +1,41 @@
|
||||
//@compile-flags: -Zmiri-disable-isolation
|
||||
//@only-target-linux: We only support tokio on Linux
|
||||
|
||||
use std::fs::remove_file;
|
||||
use tokio::fs::{File, OpenOptions};
|
||||
use tokio::io::{self, AsyncReadExt, AsyncWriteExt};
|
||||
|
||||
#[path = "../../utils/mod.rs"]
|
||||
mod utils;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
test_create_and_write().await.unwrap();
|
||||
test_create_and_read().await.unwrap();
|
||||
}
|
||||
|
||||
async fn test_create_and_write() -> io::Result<()> {
|
||||
let path = utils::prepare("foo.txt");
|
||||
let mut file = File::create(&path).await?;
|
||||
|
||||
// Write 10 bytes to the file.
|
||||
file.write(b"some bytes").await?;
|
||||
assert_eq!(file.metadata().await.unwrap().len(), 10);
|
||||
|
||||
remove_file(&path).unwrap();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn test_create_and_read() -> io::Result<()> {
|
||||
let bytes = b"more bytes";
|
||||
let path = utils::prepare_with_content("foo.txt", bytes);
|
||||
let mut file = OpenOptions::new().read(true).open(&path).await.unwrap();
|
||||
let mut buffer = [0u8; 10];
|
||||
|
||||
// Read the whole file.
|
||||
file.read(&mut buffer[..]).await?;
|
||||
assert_eq!(&buffer, b"more bytes");
|
||||
|
||||
remove_file(&path).unwrap();
|
||||
Ok(())
|
||||
}
|
20
src/tools/miri/tests/pass-dep/tokio/mpsc-await.rs
Normal file
20
src/tools/miri/tests/pass-dep/tokio/mpsc-await.rs
Normal file
@ -0,0 +1,20 @@
|
||||
//@only-target-linux: We only support tokio on Linux
|
||||
use tokio::sync::mpsc;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let (tx, mut rx) = mpsc::channel(32);
|
||||
let tx2 = tx.clone();
|
||||
|
||||
tokio::spawn(async move {
|
||||
tx.send("sending from handle").await.unwrap();
|
||||
});
|
||||
|
||||
tokio::spawn(async move {
|
||||
tx2.send("sending from handle").await.unwrap();
|
||||
});
|
||||
|
||||
while let Some(message) = rx.recv().await {
|
||||
println!("GOT = {}", message);
|
||||
}
|
||||
}
|
2
src/tools/miri/tests/pass-dep/tokio/mpsc-await.stdout
Normal file
2
src/tools/miri/tests/pass-dep/tokio/mpsc-await.stdout
Normal file
@ -0,0 +1,2 @@
|
||||
GOT = sending from handle
|
||||
GOT = sending from handle
|
@ -1,5 +1,4 @@
|
||||
//@compile-flags: -Zmiri-permissive-provenance -Zmiri-backtrace=full
|
||||
//@only-target-x86_64-unknown-linux: support for tokio only on linux and x86
|
||||
//@only-target-linux: We only support tokio on Linux
|
||||
|
||||
use tokio::time::{sleep, Duration, Instant};
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
// Need to disable preemption to stay on the supported MVP codepath in mio.
|
||||
//@compile-flags: -Zmiri-permissive-provenance -Zmiri-preemption-rate=0
|
||||
//@only-target-x86_64-unknown-linux: support for tokio exists only on linux and x86
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {}
|
Loading…
Reference in New Issue
Block a user