From cce5655f2f88e6541ba6f70cb68d183beba19ac9 Mon Sep 17 00:00:00 2001
From: cai <cai@nbcai.cc>
Date: Sat, 08 Aug 2026 18:42:37 +0800
Subject: [PATCH] test: cover per-session participant metadata refresh

---
 src/main.rs |   21 +++++----------------
 1 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index c3fa805..d357e4a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -30,7 +30,7 @@
     options::TrackPublishOptions,
     prelude::{
         DataPacket, LocalAudioTrack, LocalTrack, ParticipantIdentity, RemoteAudioTrack,
-        RemoteTrack, Room, RoomEvent, RoomOptions,
+        RemoteParticipant, RemoteTrack, Room, RoomEvent, RoomOptions,
     },
 };
 use reqwest::Client;
@@ -780,16 +780,6 @@
                         "runtime helper ignored non-user audio participant");
                     continue;
                 }
-                let ingress_metadata =
-                    match AudioIngressMetadata::from_participant(&participant.attributes()) {
-                        Ok(value) => value,
-                        Err(reason) => {
-                            warn!(call_id = %call_id, trace_id = %trace_id,
-                            metadata_status = "invalid", reason = reason,
-                            "runtime helper ignored invalid audio ingress metadata");
-                            None
-                        }
-                    };
                 let participant_alias = redact(&participant.identity().to_string());
                 let track_sid_alias = redact(&track.sid().to_string());
                 let track_name = track.name();
@@ -801,9 +791,6 @@
                     track_sid_alias = %track_sid_alias,
                     track_name = %track_name,
                     track_source = %track_source,
-                    metadata_status = if ingress_metadata.is_some() { "bound" } else { "absent" },
-                    metadata_source = ingress_metadata.as_ref().map(|_| "controlled_fixture"),
-                    metadata_sequence_present = ingress_metadata.is_some(),
                     "runtime helper user_track_subscribed"
                 );
                 spawn_user_audio_frame_observer(
@@ -818,6 +805,7 @@
                     turn_bridge_config.clone(),
                     http.clone(),
                     sink.clone(),
+                    participant,
                 );
             }
             RoomEvent::TrackSubscribed {
@@ -2929,6 +2917,7 @@
     turn_bridge_config: TurnBridgeConfig,
     http: Client,
     sink: Arc<BotAudioOutputSink>,
+    participant: RemoteParticipant,
 ) -> JoinHandle<()> {
     tokio::spawn(async move {
         let mut stream = NativeAudioStream::new(
@@ -3054,14 +3043,14 @@
 
                     if !was_in_speech && is_in_speech {
                         let turn_id = format!("turn-{:04}", vad.turn_index);
-                        match RealtimeAsrUpload::start(
+                        match RealtimeAsrUpload::start_with_participant_attributes(
                             http.clone(),
                             turn_bridge_config.realtime_asr_config(),
                             &call_id,
                             &trace_id,
                             &turn_id,
                             &vad.speech_samples,
-                            ingress_metadata.as_ref(),
+                            || participant.attributes(),
                         ) {
                             Ok(upload) => {
                                 info!(

--
Gitblit v1.9.3