1818//! signaling modes work correctly.
1919//!
2020//! V0 (Dual PC): Traditional mode with separate publisher and subscriber peer connections
21- //! Can run on localhost with `livekit-server --dev`
21+ //! Works on localhost with `livekit-server --dev`
2222//!
2323//! V1 (Single PC): New mode with a single peer connection for both publish and subscribe
24- //! Requires LiveKit Cloud or a server supporting /rtc/v1 endpoint
24+ //! Requires LiveKit Cloud or a server that supports /rtc/v1 endpoint.
25+ //! NOTE: V1 tests will fall back to V0 on localhost, so to truly test V1,
26+ //! you must set the cloud environment variables.
2527//!
26- //! Environment variables (required for V1, optional for V0) :
27- //! - LIVEKIT_URL: The LiveKit server URL (V0 defaults to ws://localhost:7880)
28- //! - LIVEKIT_API_KEY: The API key (V0 defaults to "devkey")
29- //! - LIVEKIT_API_SECRET: The API secret (V0 defaults to "secret")
28+ //! Environment variables:
29+ //! - LIVEKIT_URL: The LiveKit server URL (defaults to ws://localhost:7880)
30+ //! - LIVEKIT_API_KEY: The API key (defaults to "devkey")
31+ //! - LIVEKIT_API_SECRET: The API secret (defaults to "secret")
3032//!
3133//! Run all tests:
3234//! cargo test -p livekit --features "__lk-e2e-test,native-tls" --test peer_connection_signaling_test -- --nocapture
3335//!
34- //! Run only V0 tests (works on localhost) :
36+ //! Run only V0 tests:
3537//! cargo test -p livekit --features "__lk-e2e-test,native-tls" --test peer_connection_signaling_test v0_ -- --nocapture
3638//!
37- //! Run only V1 tests (requires cloud):
39+ //! Run only V1 tests (set cloud env vars first ):
3840//! cargo test -p livekit --features "__lk-e2e-test,native-tls" --test peer_connection_signaling_test v1_ -- --nocapture
3941
4042mod common;
@@ -78,55 +80,20 @@ mod signaling_tests {
7880 }
7981 }
8082
81- /// Default localhost configuration for V0 tests
83+ /// Default localhost configuration
8284 const DEFAULT_LOCALHOST_URL : & str = "ws://localhost:7880" ;
8385 const DEFAULT_API_KEY : & str = "devkey" ;
8486 const DEFAULT_API_SECRET : & str = "secret" ;
8587
86- /// Get environment variables for V0 tests (uses localhost defaults)
87- fn get_v0_env ( ) -> ( String , String , String ) {
88+ /// Get environment for tests (uses localhost defaults if env vars not set )
89+ fn get_env_for_mode ( _mode : SignalingMode ) -> ( String , String , String ) {
8890 let url = env:: var ( "LIVEKIT_URL" ) . unwrap_or_else ( |_| DEFAULT_LOCALHOST_URL . to_string ( ) ) ;
8991 let api_key = env:: var ( "LIVEKIT_API_KEY" ) . unwrap_or_else ( |_| DEFAULT_API_KEY . to_string ( ) ) ;
9092 let api_secret =
9193 env:: var ( "LIVEKIT_API_SECRET" ) . unwrap_or_else ( |_| DEFAULT_API_SECRET . to_string ( ) ) ;
9294 ( url, api_key, api_secret)
9395 }
9496
95- /// Check if cloud environment variables are set (required for V1 tests)
96- fn check_cloud_env_vars ( ) -> Option < ( String , String , String ) > {
97- let url = env:: var ( "LIVEKIT_URL" ) . ok ( ) ?;
98- let api_key = env:: var ( "LIVEKIT_API_KEY" ) . ok ( ) ?;
99- let api_secret = env:: var ( "LIVEKIT_API_SECRET" ) . ok ( ) ?;
100- Some ( ( url, api_key, api_secret) )
101- }
102-
103- /// Get environment for the given signaling mode
104- /// V0: Uses localhost defaults if env vars not set
105- /// V1: Requires env vars to be set, returns None if not
106- fn get_env_for_mode ( mode : SignalingMode ) -> Option < ( String , String , String ) > {
107- match mode {
108- SignalingMode :: DualPC => Some ( get_v0_env ( ) ) ,
109- SignalingMode :: SinglePC => check_cloud_env_vars ( ) ,
110- }
111- }
112-
113- /// Macro to get environment for the given mode, skipping if V1 and no cloud env
114- macro_rules! require_env_for_mode {
115- ( $mode: expr) => {
116- match get_env_for_mode( $mode) {
117- Some ( env) => env,
118- None => {
119- log:: warn!(
120- "Skipping {} test: LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET not set. \
121- V1 tests require LiveKit Cloud or a server supporting /rtc/v1 endpoint.",
122- $mode. name( )
123- ) ;
124- return Ok ( ( ) ) ;
125- }
126- }
127- } ;
128- }
129-
13097 /// Create a token for testing
13198 fn create_token (
13299 api_key : & str ,
@@ -251,7 +218,7 @@ mod signaling_tests {
251218
252219 /// Test basic connection
253220 async fn test_connect_impl ( mode : SignalingMode ) -> Result < ( ) > {
254- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
221+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
255222 let room_name = format ! ( "test_{:?}_{}" , mode, create_random_uuid( ) ) ;
256223 let token = create_token ( & api_key, & api_secret, & room_name, "test_participant" ) ?;
257224
@@ -278,7 +245,7 @@ mod signaling_tests {
278245
279246 /// Test two participants connecting
280247 async fn test_two_participants_impl ( mode : SignalingMode ) -> Result < ( ) > {
281- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
248+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
282249 let room_name = format ! ( "test_{:?}_2p_{}" , mode, create_random_uuid( ) ) ;
283250
284251 let token1 = create_token ( & api_key, & api_secret, & room_name, "participant_1" ) ?;
@@ -312,7 +279,7 @@ mod signaling_tests {
312279
313280 /// Test publishing and receiving audio tracks
314281 async fn test_audio_track_impl ( mode : SignalingMode ) -> Result < ( ) > {
315- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
282+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
316283 let room_name = format ! ( "test_{:?}_audio_{}" , mode, create_random_uuid( ) ) ;
317284
318285 let token_pub = create_token ( & api_key, & api_secret, & room_name, "publisher" ) ?;
@@ -383,7 +350,7 @@ mod signaling_tests {
383350
384351 /// Test reconnection - verifies tracks are restored
385352 async fn test_reconnect_impl ( mode : SignalingMode ) -> Result < ( ) > {
386- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
353+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
387354 let room_name = format ! ( "test_{:?}_reconnect_{}" , mode, create_random_uuid( ) ) ;
388355
389356 let token_pub = create_token ( & api_key, & api_secret, & room_name, "publisher" ) ?;
@@ -491,7 +458,7 @@ mod signaling_tests {
491458
492459 /// Test data channel
493460 async fn test_data_channel_impl ( mode : SignalingMode ) -> Result < ( ) > {
494- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
461+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
495462 let room_name = format ! ( "test_{:?}_data_{}" , mode, create_random_uuid( ) ) ;
496463
497464 let token1 = create_token ( & api_key, & api_secret, & room_name, "participant_1" ) ?;
@@ -559,7 +526,7 @@ mod signaling_tests {
559526
560527 /// Test node failure reconnection scenario
561528 async fn test_node_failure_impl ( mode : SignalingMode ) -> Result < ( ) > {
562- let ( url, api_key, api_secret) = require_env_for_mode ! ( mode) ;
529+ let ( url, api_key, api_secret) = get_env_for_mode ( mode) ;
563530 let room_name = format ! ( "test_{:?}_node_fail_{}" , mode, create_random_uuid( ) ) ;
564531
565532 let token = create_token ( & api_key, & api_secret, & room_name, "test_participant" ) ?;
0 commit comments