use rsvici::Client;
use futures_util::{stream::TryStreamExt, StreamExt};
use pretty_assertions::assert_eq;
use serde::Deserialize;
use tokio_test::io::Builder;
#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Log {
group: String,
level: u32,
msg: String,
}
#[tokio::test]
async fn subscribe() {
#[rustfmt::skip]
let (mock_stream, mut handle) = Builder::new()
.write(&[
0, 0, 0, 5,
3, 3, b'l', b'o', b'g',
])
.read(&[
0, 0, 0, 5,
5, 3, b'l', b'o', b'g',
])
.read(&[
0, 0, 0, 66,
7, 3, b'l', b'o', b'g',
3, 5, b'g', b'r', b'o', b'u', b'p', 0, 3, b'I', b'K', b'E',
3, 5, b'l', b'e', b'v', b'e', b'l', 0, 1, b'1',
3, 3, b'm', b's', b'g', 0, 32, b'r', b'e', b'c', b'e', b'i', b'v', b'e', b'd', b' ', b'F', b'R', b'A', b'G', b'M', b'E', b'N', b'T', b'A', b'T', b'I', b'O', b'N', b' ', b'v', b'e', b'n', b'd', b'o', b'r', b' ', b'I', b'D',
])
.read(&[
0, 0, 0, 56,
7, 3, b'l', b'o', b'g',
3, 5, b'g', b'r', b'o', b'u', b'p', 0, 3, b'I', b'K', b'E',
3, 5, b'l', b'e', b'v', b'e', b'l', 0, 1, b'1',
3, 3, b'm', b's', b'g', 0, 22, b'r', b'e', b'c', b'e', b'i', b'v', b'e', b'd', b' ', b'D', b'P', b'D', b' ', b'v', b'e', b'n', b'd', b'o', b'r', b' ', b'I', b'D',
])
.build_with_handle();
let mut client = Client::new(mock_stream);
{
let stream = client.subscribe::<Log>("log");
let actual: Vec<_> = stream.take(2).try_collect().await.unwrap();
assert_eq!(
actual,
vec![
Log {
group: "IKE".to_string(),
level: 1,
msg: "received FRAGMENTATION vendor ID".to_string(),
},
Log {
group: "IKE".to_string(),
level: 1,
msg: "received DPD vendor ID".to_string(),
},
]
);
}
#[rustfmt::skip]
handle
.write(&[
0, 0, 0, 5,
4, 3, b'l', b'o', b'g',
])
.read(&[
0, 0, 0, 76,
7, 3, b'l', b'o', b'g',
3, 5, b'g', b'r', b'o', b'u', b'p', 0, 3, b'I', b'K', b'E',
3, 5, b'l', b'e', b'v', b'e', b'l', 0, 1, b'1',
3, 3, b'm', b's', b'g', 0, 42, b'1', b'9', b'2', b'.', b'0', b'.', b'2', b'.', b'1', b' ', b'i', b's', b' ', b'i', b'n', b'i', b't', b'i', b'a', b't', b'i', b'n', b'g', b' ', b'a', b' ', b'M', b'a', b'i', b'n', b' ', b'M', b'o', b'd', b'e', b' ', b'I', b'K', b'E', b'_', b'S', b'A',
])
.read(&[
0, 0, 0, 5,
5,
]);
}