use anyhow::Result; use wick_component::{json, Value}; use wick_interface_http::types::{HttpRequest, HttpResponse, RequestMiddlewareResponse}; #[test_logger::test(tokio::test)] async fn request_repr() -> Result<()> { let expected = HttpRequest { version: wick_interface_http::types::HttpVersion::Http11, headers: [("accept".to_owned(), vec!["*/*".to_owned()])].into(), authority: "localhost:8080".to_owned(), path: "/redirect".to_owned(), remote_addr: "127.0.0.1:53371".to_owned(), uri: "/redirect?url=https://google.com".to_owned(), method: wick_interface_http::types::HttpMethod::Get, query_parameters: [("url".to_owned(), vec!["https://google.com".to_owned()])].into(), scheme: wick_interface_http::types::HttpScheme::Http, }; let expected_json = json!({ "authority":"localhost:8080", "headers":{ "accept":["*/*"], }, "method":"Get", "path":"/redirect", "query_parameters":{"url":["https://google.com"]}, "remote_addr":"127.0.0.1:53371", "scheme":"Http", "uri":"/redirect?url=https://google.com", "version":"1.1" }); let expected_as_bytes = wick_component::wasmrs_codec::messagepack::serialize(&expected)?; let actual_as_json: Value = wick_component::wasmrs_codec::messagepack::deserialize(&expected_as_bytes)?; println!("expected_json: {}", expected_json); println!("actual_json: {}", actual_as_json); assert_eq!(actual_as_json, expected_json); let actual: HttpRequest = wick_component::wasmrs_codec::messagepack::deserialize(&expected_as_bytes)?; assert_eq!(actual, expected); let expected_json_as_bytes = wick_component::wasmrs_codec::messagepack::serialize(&expected_json)?; let actual_json: HttpRequest = wick_component::wasmrs_codec::messagepack::deserialize(&expected_json_as_bytes)?; assert_eq!(actual_json, expected); Ok(()) } #[test_logger::test(tokio::test)] async fn response_repr() -> Result<()> { let expected = HttpResponse { status: wick_interface_http::types::StatusCode::TemporaryRedirect, version: wick_interface_http::types::HttpVersion::Http11, headers: [("location".to_owned(), vec!["https://google.com".to_owned()])].into(), }; let expected_json = json!({"headers":{"location":["https://google.com"]},"status":"307","version":"1.1"}); let expected_as_bytes = wick_component::wasmrs_codec::messagepack::serialize(&expected)?; let actual_as_json: Value = wick_component::wasmrs_codec::messagepack::deserialize(&expected_as_bytes)?; println!("as_json: {}", actual_as_json); assert_eq!(actual_as_json, expected_json); let expected_json_as_bytes = wick_component::wasmrs_codec::messagepack::serialize(&expected)?; let actual: HttpResponse = wick_component::wasmrs_codec::messagepack::deserialize(&expected_as_bytes)?; assert_eq!(actual, expected); let actual_json: HttpResponse = wick_component::wasmrs_codec::messagepack::deserialize(&expected_json_as_bytes)?; assert_eq!(actual_json, expected); Ok(()) } #[test_logger::test(tokio::test)] async fn enum_repr() -> Result<()> { let expected = HttpResponse { status: wick_interface_http::types::StatusCode::TemporaryRedirect, version: wick_interface_http::types::HttpVersion::Http11, headers: [("location".to_owned(), vec!["https://google.com".to_owned()])].into(), }; let expected_as_bytes = wick_component::wasmrs_codec::messagepack::serialize(&RequestMiddlewareResponse::HttpResponse(expected.clone()))?; let actual: HttpResponse = wick_component::wasmrs_codec::messagepack::deserialize(&expected_as_bytes)?; assert_eq!(actual, expected); Ok(()) }