#[cfg(all(
not(target_arch = "wasm32"),
any(feature = "hyper-backend", feature = "curl-backend")
))]
use http_kit::{Endpoint, Method};
#[cfg(default_hyper)]
use zenwave::backend::HyperBackend;
#[cfg(all(
not(target_arch = "wasm32"),
any(feature = "hyper-backend", feature = "curl-backend")
))]
mod common;
#[cfg(all(
not(target_arch = "wasm32"),
any(feature = "hyper-backend", feature = "curl-backend")
))]
use common::httpbin_uri;
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), test)]
#[cfg(default_hyper)]
fn test_hyper_backend_creation() {
let backend = HyperBackend::default();
assert_ne!(format!("{backend:?}"), "");
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), test)]
#[cfg(default_hyper)]
fn test_hyper_backend_default() {
let backend = HyperBackend::default();
assert_ne!(format!("{backend:?}"), "");
}
#[test_executors::async_test]
#[cfg(default_hyper)]
async fn test_hyper_backend_get_request() {
let mut backend = HyperBackend::default();
let mut request = http::Request::builder()
.method(Method::GET)
.uri(httpbin_uri("/get"))
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(response.is_ok());
let response = response.unwrap();
assert!(response.status().is_success());
}
#[test_executors::async_test]
#[cfg(default_hyper)]
async fn test_hyper_backend_post_request() {
let mut backend = HyperBackend::default();
let mut request = http::Request::builder()
.method(Method::POST)
.uri(httpbin_uri("/post"))
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(response.is_ok());
let response = response.unwrap();
assert!(response.status().is_success());
}
#[test_executors::async_test]
#[cfg(default_hyper)]
async fn test_hyper_backend_https_request() {
let mut backend = HyperBackend::default();
let mut request = http::Request::builder()
.method(Method::GET)
.uri(httpbin_uri("/get"))
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(response.is_ok());
let response = response.unwrap();
assert!(response.status().is_success());
}
#[test_executors::async_test]
#[cfg(default_hyper)]
async fn test_hyper_backend_invalid_uri() {
let mut backend = HyperBackend::default();
let mut request = http::Request::builder()
.method(Method::GET)
.uri("invalid-uri")
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(response.is_err());
}
#[test_executors::async_test]
#[cfg(default_hyper)]
async fn test_hyper_backend_http_error_returns_err() {
let mut backend = HyperBackend::default();
let mut request = http::Request::builder()
.method(Method::GET)
.uri(httpbin_uri("/status/404"))
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(
response.is_err(),
"expected non-success status to surface as Err"
);
}
#[test_executors::async_test]
#[cfg(all(not(target_arch = "wasm32"), feature = "curl-backend"))]
async fn test_curl_backend_http_error_returns_err() {
use zenwave::backend::CurlBackend;
let mut backend = CurlBackend::default();
let mut request = http::Request::builder()
.method(Method::GET)
.uri(httpbin_uri("/status/500"))
.body(http_kit::Body::empty())
.unwrap();
let response = backend.respond(&mut request).await;
assert!(
response.is_err(),
"expected non-success status to surface as Err"
);
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), test)]
#[cfg(default_hyper)]
fn test_hyper_backend_request_cancellation() {}
#[cfg(target_arch = "wasm32")]
mod web_backend_tests {
use zenwave::backend::WebBackend;
#[test_executors::async_test]
async fn test_web_backend_creation() {
let backend = WebBackend::new(zenwave::Transport::system());
assert!(format!("{backend:?}").starts_with("WebBackend"));
}
#[test_executors::async_test]
async fn test_web_backend_default() {
let backend = WebBackend::default();
assert!(format!("{backend:?}").starts_with("WebBackend"));
}
}