xwt_tests/tests/
closed_bi_read_stream.rs1use xwt_core::prelude::*;
2
3#[derive(Debug, thiserror::Error)]
4pub enum Error<Endpoint>
5where
6 Endpoint: xwt_core::endpoint::Connect + std::fmt::Debug,
7 Endpoint::Connecting: std::fmt::Debug,
8 ConnectSessionFor<Endpoint>: xwt_core::session::stream::OpenBi + std::fmt::Debug,
9{
10 #[error("connect: {0}")]
11 Connect(#[source] xwt_error::Connect<Endpoint>),
12 #[error("open bi stream: {0}")]
13 OpenBiStream(#[source] BiStreamOpenErrorFor<ConnectSessionFor<Endpoint>>),
14 #[error("opening bi stream: {0}")]
15 OpeningBiStream(#[source] BiStreamOpeningErrorFor<ConnectSessionFor<Endpoint>>),
16 #[error("write stream aborted: {0}")]
17 WriteStreamAborted(#[source] WriteAbortedErrorFor<SendStreamFor<ConnectSessionFor<Endpoint>>>),
18 #[error("error code mismatch: got code {0}")]
19 ErrorCodeMismatch(xwt_core::stream::ErrorCode),
20}
21
22pub async fn run<Endpoint>(
23 endpoint: Endpoint,
24 url: &str,
25 expected_error_code: xwt_core::stream::ErrorCode,
26) -> Result<(), Error<Endpoint>>
27where
28 Endpoint: xwt_core::endpoint::Connect + std::fmt::Debug,
29 Endpoint::Connecting: std::fmt::Debug,
30 ConnectSessionFor<Endpoint>: xwt_core::session::stream::OpenBi + std::fmt::Debug,
31 SendStreamFor<ConnectSessionFor<Endpoint>>: xwt_core::stream::WriteAborted,
32{
33 let session = crate::utils::connect(&endpoint, url)
34 .await
35 .map_err(Error::Connect)?;
36
37 let opening = session.open_bi().await.map_err(Error::OpenBiStream)?;
38 let (send_stream, _recv_stream) = opening.wait_bi().await.map_err(Error::OpeningBiStream)?;
39
40 let error_code = send_stream
41 .aborted()
42 .await
43 .map_err(Error::WriteStreamAborted)?;
44
45 if error_code != expected_error_code {
46 return Err(Error::ErrorCodeMismatch(error_code));
47 }
48
49 Ok(())
50}