提交 2cbe39c4 authored 作者: Serhij S's avatar Serhij S

insta tests

上级 36e67c8d
...@@ -23,4 +23,5 @@ sysinfo = "0.30.6" ...@@ -23,4 +23,5 @@ sysinfo = "0.30.6"
thiserror = "1.0.57" thiserror = "1.0.57"
[dev-dependencies] [dev-dependencies]
insta = "1.36.1"
tokio = { version = "1.36.0", features = ["rt", "macros", "time"] } tokio = { version = "1.36.0", features = ["rt", "macros", "time"] }
...@@ -307,7 +307,7 @@ mod test { ...@@ -307,7 +307,7 @@ mod test {
use super::Hub; use super::Hub;
#[derive(Clone)] #[derive(Clone, Debug)]
enum Message { enum Message {
Temperature(f64), Temperature(f64),
Humidity(f64), Humidity(f64),
...@@ -331,13 +331,11 @@ mod test { ...@@ -331,13 +331,11 @@ mod test {
sender.send(Message::Humidity(2.0)); sender.send(Message::Humidity(2.0));
sender.send(Message::Test); sender.send(Message::Test);
} }
let mut c = 0; let mut messages = Vec::with_capacity(20);
while let Ok(msg) = recv.try_recv() { while let Ok(msg) = recv.try_recv() {
match msg { messages.push(msg);
Message::Temperature(_) | Message::Humidity(_) => c += 1,
Message::Test => panic!(),
}
} }
assert_eq!(c, 20); insta::assert_snapshot!(messages.len());
insta::assert_debug_snapshot!(messages);
} }
} }
...@@ -306,7 +306,7 @@ mod test { ...@@ -306,7 +306,7 @@ mod test {
use super::Hub; use super::Hub;
#[derive(Clone)] #[derive(Clone, Debug)]
enum Message { enum Message {
Temperature(f64), Temperature(f64),
Humidity(f64), Humidity(f64),
...@@ -319,9 +319,9 @@ mod test { ...@@ -319,9 +319,9 @@ mod test {
async fn test_hub() { async fn test_hub() {
let hub = Hub::<Message>::new().set_default_channel_capacity(20); let hub = Hub::<Message>::new().set_default_channel_capacity(20);
let sender = hub.sender(); let sender = hub.sender();
let recv = hub let client1 = hub
.register( .register(
"test_recv", "test1",
event_matches!(Message::Temperature(_) | Message::Humidity(_)), event_matches!(Message::Temperature(_) | Message::Humidity(_)),
) )
.unwrap(); .unwrap();
...@@ -330,13 +330,11 @@ mod test { ...@@ -330,13 +330,11 @@ mod test {
sender.send(Message::Humidity(2.0)).await; sender.send(Message::Humidity(2.0)).await;
sender.send(Message::Test).await; sender.send(Message::Test).await;
} }
let mut c = 0; let mut messages = Vec::with_capacity(20);
while let Ok(msg) = recv.try_recv() { while let Ok(msg) = client1.try_recv() {
match msg { messages.push(msg);
Message::Temperature(_) | Message::Humidity(_) => c += 1,
Message::Test => panic!(),
}
} }
assert_eq!(c, 20); insta::assert_snapshot!(messages.len());
insta::assert_debug_snapshot!(messages);
} }
} }
...@@ -325,12 +325,16 @@ mod test { ...@@ -325,12 +325,16 @@ mod test {
} }
}); });
thread::sleep(Duration::from_secs(1)); thread::sleep(Duration::from_secs(1));
let mut messages = Vec::new();
while let Ok(msg) = rx.recv() { while let Ok(msg) = rx.recv() {
thread::sleep(Duration::from_millis(10)); thread::sleep(Duration::from_millis(10));
if matches!(msg, Message::Spam) { if matches!(msg, Message::Spam) {
panic!("delivery policy not respected ({:?})", msg); panic!("delivery policy not respected ({:?})", msg);
} }
messages.push(msg);
} }
insta::assert_debug_snapshot!(messages.len());
insta::assert_debug_snapshot!(messages);
} }
#[test] #[test]
...@@ -348,20 +352,23 @@ mod test { ...@@ -348,20 +352,23 @@ mod test {
thread::sleep(Duration::from_secs(1)); thread::sleep(Duration::from_secs(1));
let mut c = 0; let mut c = 0;
let mut t = 0; let mut t = 0;
let mut messages = Vec::new();
while let Ok(msg) = rx.recv() { while let Ok(msg) = rx.recv() {
match msg { match msg {
Message::Test(_) => c += 1, Message::Test(_) => c += 1,
Message::Temperature(_) => t += 1, Message::Temperature(_) => t += 1,
Message::Spam => {} Message::Spam => {}
} }
messages.push(msg);
} }
assert_eq!(c, 10); insta::assert_snapshot!(c);
assert_eq!(t, 1); insta::assert_snapshot!(t);
insta::assert_debug_snapshot!(messages);
} }
#[test] #[test]
fn test_poisoning() { fn test_poisoning() {
let n = 20_000; let n = 5_000;
for i in 0..n { for i in 0..n {
let (tx, rx) = bounded::<Message>(512); let (tx, rx) = bounded::<Message>(512);
let rx_t = thread::spawn(move || while rx.recv().is_ok() {}); let rx_t = thread::spawn(move || while rx.recv().is_ok() {});
......
...@@ -490,12 +490,16 @@ mod test { ...@@ -490,12 +490,16 @@ mod test {
} }
}); });
thread::sleep(Duration::from_secs(1)); thread::sleep(Duration::from_secs(1));
let mut messages = Vec::new();
while let Ok(msg) = rx.recv().await { while let Ok(msg) = rx.recv().await {
thread::sleep(Duration::from_millis(10)); thread::sleep(Duration::from_millis(10));
if matches!(msg, Message::Spam) { if matches!(msg, Message::Spam) {
panic!("delivery policy not respected ({:?})", msg); panic!("delivery policy not respected ({:?})", msg);
} }
messages.push(msg);
} }
insta::assert_debug_snapshot!(messages.len());
insta::assert_debug_snapshot!(messages);
} }
#[tokio::test] #[tokio::test]
...@@ -513,20 +517,23 @@ mod test { ...@@ -513,20 +517,23 @@ mod test {
thread::sleep(Duration::from_secs(1)); thread::sleep(Duration::from_secs(1));
let mut c = 0; let mut c = 0;
let mut t = 0; let mut t = 0;
let mut messages = Vec::new();
while let Ok(msg) = rx.recv().await { while let Ok(msg) = rx.recv().await {
match msg { match msg {
Message::Test(_) => c += 1, Message::Test(_) => c += 1,
Message::Temperature(_) => t += 1, Message::Temperature(_) => t += 1,
Message::Spam => {} Message::Spam => {}
} }
messages.push(msg);
} }
assert_eq!(c, 10); insta::assert_snapshot!(c);
assert_eq!(t, 1); insta::assert_snapshot!(t);
insta::assert_debug_snapshot!(messages);
} }
#[tokio::test] #[tokio::test]
async fn test_poisoning() { async fn test_poisoning() {
let n = 20_000; let n = 5_000;
for _ in 0..n { for _ in 0..n {
let (tx, rx) = bounded::<Message>(512); let (tx, rx) = bounded::<Message>(512);
let rx_t = tokio::spawn(async move { while rx.recv().await.is_ok() {} }); let rx_t = tokio::spawn(async move { while rx.recv().await.is_ok() {} });
......
---
source: src/hub.rs
expression: messages
---
[
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
]
---
source: src/hub.rs
expression: messages.len()
---
20
---
source: src/hub_async.rs
expression: messages
---
[
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
Temperature(
1.0,
),
Humidity(
2.0,
),
]
---
source: src/hub_async.rs
expression: messages.len()
---
20
---
source: src/pchannel.rs
expression: messages
---
[
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
]
---
source: src/pchannel.rs
expression: messages.len()
---
20
---
source: src/pchannel.rs
expression: messages
---
[
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Temperature(
123.0,
),
]
---
source: src/pchannel.rs
expression: c
---
10
---
source: src/pchannel_async.rs
expression: messages
---
[
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
Test(
123,
),
Temperature(
123.0,
),
]
---
source: src/pchannel_async.rs
expression: messages.len()
---
20
---
source: src/pchannel_async.rs
expression: t
---
1
---
source: src/pchannel_async.rs
expression: messages
---
[
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Test(
123,
),
Spam,
Temperature(
123.0,
),
]
---
source: src/pchannel_async.rs
expression: c
---
10
---
source: src/ttlcell.rs
expression: opt.as_ref().copied()
---
None
---
source: src/ttlcell.rs
expression: opt.as_ref().copied()
---
Some(
30,
)
---
source: src/ttlcell.rs
expression: opt.as_ref().copied()
---
None
---
source: src/ttlcell.rs
expression: opt.as_ref().copied()
---
Some(
25,
)
...@@ -146,14 +146,14 @@ mod test { ...@@ -146,14 +146,14 @@ mod test {
let ttl = Duration::from_millis(10); let ttl = Duration::from_millis(10);
let mut opt = TtlCell::new_with_value(ttl, 25); let mut opt = TtlCell::new_with_value(ttl, 25);
thread::sleep(ttl / 2); thread::sleep(ttl / 2);
assert_eq!(opt.as_ref().copied(), Some(25)); insta::assert_debug_snapshot!(opt.as_ref().copied());
thread::sleep(ttl); thread::sleep(ttl);
assert_eq!(opt.as_ref().copied(), None); insta::assert_debug_snapshot!(opt.as_ref().copied());
opt.set(30); opt.set(30);
thread::sleep(ttl / 2); thread::sleep(ttl / 2);
assert_eq!(opt.as_ref().copied(), Some(30)); insta::assert_debug_snapshot!(opt.as_ref().copied());
thread::sleep(ttl); thread::sleep(ttl);
assert_eq!(opt.as_ref().copied(), None); insta::assert_debug_snapshot!(opt.as_ref().copied());
} }
#[test] #[test]
fn test_take_replace() { fn test_take_replace() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论