-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor test server to prepare for more tests (#90)
* Rename xwt-echo-test-server to xwt-test-server * Adjust CI for the new test server name * Refactor the test server to allow for more test scenarios
- Loading branch information
Showing
6 changed files
with
93 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
6 changes: 3 additions & 3 deletions
6
crates/xwt-test-echo-server/Cargo.toml → crates/xwt-test-server/Cargo.toml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 3 additions & 69 deletions
72
crates/xwt-test-echo-server/src/lib.rs → crates/xwt-test-server/src/echo.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
//! The implementation of the echo server to use for xwt testing. | ||
//! Not intended to be wasm-compatible. | ||
#![allow(missing_docs)] | ||
#![cfg(not(target_family = "wasm"))] | ||
|
||
pub mod echo; | ||
|
||
#[derive(Default)] | ||
pub struct EndpointParams { | ||
pub addr: Option<std::net::SocketAddr>, | ||
pub cert: Option<wtransport::tls::Certificate>, | ||
} | ||
|
||
pub async fn endpoint( | ||
params: EndpointParams, | ||
) -> Result<wtransport::Endpoint<wtransport::endpoint::endpoint_side::Server>, std::io::Error> { | ||
let EndpointParams { addr, cert } = params; | ||
|
||
let cert = cert.unwrap_or_else(|| { | ||
wtransport::tls::Certificate::new(vec![xwt_test_assets::CERT], xwt_test_assets::KEY) | ||
.unwrap() | ||
}); | ||
|
||
match cert.certificates().first() { | ||
Some(cert) => { | ||
let sha256_fingerpint = xwt_cert_utils::fingerprint::sha256(cert); | ||
tracing::info!(message = "using tls certificate", %sha256_fingerpint); | ||
} | ||
None => tracing::info!(message = "not using tls certificate"), | ||
}; | ||
|
||
let server_config = | ||
wtransport::ServerConfig::builder() | ||
.with_bind_address(addr.unwrap_or(std::net::SocketAddr::V4( | ||
std::net::SocketAddrV4::new(std::net::Ipv4Addr::new(127, 0, 0, 1), 0), | ||
))) | ||
.with_certificate(cert) | ||
.build(); | ||
|
||
let endpoint = wtransport::Endpoint::server(server_config)?; | ||
|
||
Ok(endpoint) | ||
} | ||
|
||
pub async fn serve_endpoint( | ||
endpoint: wtransport::Endpoint<wtransport::endpoint::endpoint_side::Server>, | ||
) -> Result<std::convert::Infallible, std::io::Error> { | ||
let bind_addr = endpoint.local_addr()?; | ||
tracing::info!(message = "serving endpoint", %bind_addr); | ||
|
||
loop { | ||
let incoming_session = endpoint.accept().await; | ||
tokio::spawn(async move { | ||
if let Err(error) = serve_incoming_session(incoming_session).await { | ||
tracing::error!(message = "error while serving incoming session", %error); | ||
} | ||
}); | ||
} | ||
} | ||
|
||
pub async fn serve_incoming_session( | ||
incoming_session: wtransport::endpoint::IncomingSession, | ||
) -> Result<(), wtransport::error::ConnectionError> { | ||
tracing::info!(message = "got an incoming session"); | ||
let session_request = incoming_session.await?; | ||
|
||
let path = session_request.path(); | ||
|
||
match path { | ||
"/echo" => { | ||
tracing::info!(message = "invoking echo handler"); | ||
self::echo::serve_session_request(session_request).await | ||
} | ||
_ => { | ||
tracing::info!(message = "rejecting incoming session due to path mismatch"); | ||
session_request.not_found().await; | ||
Ok(()) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters