#[cfg(test)]
mod tests {
use crate::api::common::extension::ExtensionFormat;
use crate::api::server::config::ServerConfig;
use crate::api::server::transport::DefaultMediaTransportServer;
use crate::api::server::transport::MediaTransportServer;
use std::time::Duration;
#[tokio::test]
async fn test_server_lifecycle() {
let config = ServerConfig {
local_address: "127.0.0.1:0".parse().unwrap(), rtcp_mux: true,
header_extensions_enabled: true,
header_extension_format: ExtensionFormat::OneByte,
csrc_management_enabled: true,
enable_jitter_buffer: true,
jitter_buffer_size: 50,
jitter_max_packet_age_ms: 200,
default_payload_type: 8,
clock_rate: 8000,
security_config: Default::default(),
buffer_limits: Default::default(),
high_performance_buffers_enabled: false,
max_clients: 100,
media_sync_enabled: Some(false),
ssrc_demultiplexing_enabled: Some(false),
transmit_buffer_config: Default::default(),
rtp_session_buffer_config: Default::default(),
rtp_transport_buffer_config: Default::default(),
frame_channel_capacity: 16,
};
let server = DefaultMediaTransportServer::new(config).await.unwrap();
assert!(server.start().await.is_ok(), "Failed to start server");
let addr = server.get_local_address().await.unwrap();
println!("Server bound to {}", addr);
let stats = server.get_stats().await.unwrap();
assert_eq!(stats.streams.len(), 0, "New server should have no streams");
assert!(
server.enable_csrc_management().await.unwrap(),
"Failed to enable CSRC management"
);
assert!(
server.is_csrc_management_enabled().await.unwrap(),
"CSRC management should be enabled"
);
assert!(
server.enable_ssrc_demultiplexing().await.unwrap(),
"Failed to enable SSRC demultiplexing"
);
assert!(
server.is_ssrc_demultiplexing_enabled().await.unwrap(),
"SSRC demultiplexing should be enabled"
);
assert!(
server
.enable_header_extensions(ExtensionFormat::OneByte)
.await
.unwrap(),
"Failed to enable header extensions"
);
assert!(
server.is_header_extensions_enabled().await.unwrap(),
"Header extensions should be enabled"
);
server
.configure_header_extension(
1,
"urn:ietf:params:rtp-hdrext:ssrc-audio-level".to_string(),
)
.await
.unwrap();
assert!(server.stop().await.is_ok(), "Failed to stop server");
tokio::time::sleep(Duration::from_millis(100)).await;
}
}