0.3.4-alpha.4

This commit is contained in:
2026-09-21 18:00:32 +02:00
parent bbecae5e0d
commit fa17ea0ca5
12 changed files with 792 additions and 47 deletions

View File

@@ -0,0 +1,40 @@
// file: crates/common/game-realtime-websocket-lib/unit_tests/config.rs
// version: 1
#[test]
fn default_configuration_matches_the_product_baseline() {
let config = crate::WebSocketConfig::default();
assert_eq!(config.max_message_size(), 1024 * 1024);
assert_eq!(config.max_frame_size(), 1024 * 1024);
assert_eq!(config.write_buffer_size(), 64 * 1024);
assert_eq!(config.max_write_buffer_size(), 2 * 1024 * 1024);
assert_eq!(config.connect_timeout(), std::time::Duration::from_secs(10));
assert_eq!(config.send_timeout(), std::time::Duration::from_secs(5));
assert_eq!(config.close_timeout(), std::time::Duration::from_secs(2));
assert!(config.validate().is_ok());
}
#[test]
fn invalid_message_and_write_buffer_bounds_are_rejected() {
let zero_message = crate::WebSocketConfig::default().with_max_message_size(0);
assert_invalid_configuration(zero_message);
let oversized_frame = crate::WebSocketConfig::default().with_max_frame_size(2 * 1024 * 1024);
assert_invalid_configuration(oversized_frame);
let insufficient_write_buffer = crate::WebSocketConfig::default().with_max_write_buffer_size(1024 * 1024);
assert_invalid_configuration(insufficient_write_buffer);
}
#[test]
fn zero_operation_deadlines_are_rejected() {
assert_invalid_configuration(crate::WebSocketConfig::default().with_connect_timeout(std::time::Duration::ZERO));
assert_invalid_configuration(crate::WebSocketConfig::default().with_send_timeout(std::time::Duration::ZERO));
assert_invalid_configuration(crate::WebSocketConfig::default().with_close_timeout(std::time::Duration::ZERO));
}
fn assert_invalid_configuration(config: crate::WebSocketConfig) {
let result = config.validate();
match result {
Ok(()) => panic!("invalid WebSocket configuration was accepted"),
Err(error) => assert_eq!(error.kind(), game_realtime_transport_lib::TransportErrorKind::InvalidConfiguration),
}
}

View File

@@ -0,0 +1,18 @@
// file: crates/common/game-realtime-websocket-lib/unit_tests/websocket.rs
// version: 1
#[test]
fn tungstenite_backpressure_maps_to_transport_backpressure() {
let message = tokio_tungstenite::tungstenite::Message::Binary(vec![1, 2, 3].into());
let backend_error = tokio_tungstenite::tungstenite::Error::WriteBufferFull(Box::new(message));
let mapped = super::map_stream_error(backend_error);
assert_eq!(mapped.kind(), game_realtime_transport_lib::TransportErrorKind::Backpressure);
}
#[test]
fn tungstenite_capacity_maps_to_message_too_large() {
let capacity = tokio_tungstenite::tungstenite::error::CapacityError::MessageTooLong { size: 65, max_size: 64 };
let backend_error = tokio_tungstenite::tungstenite::Error::Capacity(capacity);
let mapped = super::map_stream_error(backend_error);
assert_eq!(mapped.kind(), game_realtime_transport_lib::TransportErrorKind::MessageTooLarge);
}