use futures_util::StreamExt;
use rs2_stream::media::streaming::{MediaStreamingService, StreamingServiceFactory};
use rs2_stream::media::types::{MediaStream, MediaType, QualityLevel};
use std::collections::HashMap;
use tokio::runtime::Runtime;
#[test]
fn test_streaming_service_creation() {
let live_service = StreamingServiceFactory::create_live_streaming_service();
let file_service = StreamingServiceFactory::create_file_streaming_service();
let low_latency_service = StreamingServiceFactory::create_low_latency_service();
assert!(true);
}
#[test]
fn test_streaming_service_metrics() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
let service = MediaStreamingService::new(512);
let metrics = service.get_metrics().await;
assert_eq!(metrics.items_processed, 0);
assert_eq!(metrics.bytes_processed, 0);
assert_eq!(metrics.errors, 0);
assert_eq!(metrics.average_item_size, 0.0);
});
}
#[test]
fn test_streaming_service_live_stream() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
let service = MediaStreamingService::new(512);
let mut metadata = HashMap::new();
metadata.insert("max_chunks".to_string(), "10".to_string());
let stream_config = MediaStream {
id: "test_live_stream".to_string(),
user_id: 0,
content_type: MediaType::Video,
quality: QualityLevel::Low,
chunk_size: 1024,
created_at: Default::default(),
metadata,
};
let mut stream = service.start_live_stream(stream_config).await;
let mut chunks = Vec::new();
for _ in 0..5 {
if let Some(chunk) = stream.next().await {
chunks.push(chunk);
}
}
assert!(!chunks.is_empty());
assert!(chunks.len() <= 5);
for chunk in chunks {
assert_eq!(chunk.stream_id, "test_live_stream");
assert_eq!(chunk.data.len(), 1024);
assert!(!chunk.is_final);
}
let metrics = service.get_metrics().await;
assert!(metrics.items_processed > 0);
assert!(metrics.bytes_processed > 0);
});
}
#[test]
fn test_streaming_service_metrics_stream() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
let service = MediaStreamingService::new(512);
let mut metrics_stream = service.get_metrics_stream();
let metrics = metrics_stream.next().await.unwrap();
assert_eq!(metrics.items_processed, 0);
assert_eq!(metrics.bytes_processed, 0);
});
}
#[test]
fn test_streaming_service_shutdown() {
let rt = Runtime::new().unwrap();
rt.block_on(async {
let service = MediaStreamingService::new(512);
service.shutdown().await;
let chunk_stream = service.get_chunk_stream();
assert!(true);
});
}
fn create_test_stream_config(id: &str, chunk_size: usize) -> MediaStream {
let mut metadata = HashMap::new();
metadata.insert("test_key".to_string(), "test_value".to_string());
MediaStream {
id: id.to_string(),
user_id: 0,
content_type: MediaType::Video,
quality: QualityLevel::Low,
chunk_size,
created_at: Default::default(),
metadata,
}
}