Skip to content

Commit b1580b4

Browse files
kixelatedclaude
andcommitted
Fix CI: await async subscribe_track and clippy/fmt cleanups
subscribe_track is now async; await it in the moq-ffi Rust tests and the moq-rs Python test. Also drop a useless .into() and a needless borrow flagged by clippy in moq-mux, plus rustfmt fixes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 58a4ca7 commit b1580b4

9 files changed

Lines changed: 50 additions & 18 deletions

File tree

py/moq-rs/tests/test_local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ async def test_dynamic_track_request():
243243
broadcast = moq.BroadcastProducer()
244244
dynamic = broadcast.dynamic()
245245
consumer = broadcast.consume()
246-
track_consumer = consumer.subscribe_track("events")
246+
track_consumer = await consumer.subscribe_track("events")
247247

248248
track = await asyncio.wait_for(dynamic.requested_track(), timeout=5.0)
249249
assert track.name == "events"

rs/moq-ffi/src/test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async fn dynamic_track_request() {
7676
let broadcast = MoqBroadcastProducer::new().unwrap();
7777
let dynamic = broadcast.dynamic().unwrap();
7878
let consumer = broadcast.consume().unwrap();
79-
let track_consumer = consumer.subscribe_track("events".into()).unwrap();
79+
let track_consumer = consumer.subscribe_track("events".into()).await.unwrap();
8080

8181
let track = tokio::time::timeout(TIMEOUT, dynamic.requested_track())
8282
.await
@@ -103,7 +103,7 @@ async fn dynamic_track_request_can_abort() {
103103
let broadcast = MoqBroadcastProducer::new().unwrap();
104104
let dynamic = broadcast.dynamic().unwrap();
105105
let consumer = broadcast.consume().unwrap();
106-
let _track_consumer = consumer.subscribe_track("unknown".into()).unwrap();
106+
let _track_consumer = consumer.subscribe_track("unknown".into()).await.unwrap();
107107

108108
let track = tokio::time::timeout(TIMEOUT, dynamic.requested_track())
109109
.await

rs/moq-gst/src/source/imp.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,7 @@ async fn reconcile(
417417
let id = NEXT_PAD_ID.fetch_add(1, Ordering::Relaxed);
418418

419419
let track_subscriber = broadcast.track(&name)?.subscribe(None)?.await?;
420-
let track =
421-
moq_mux::container::Consumer::new(track_subscriber, container).with_latency(Duration::from_secs(1));
420+
let track = moq_mux::container::Consumer::new(track_subscriber, container).with_latency(Duration::from_secs(1));
422421

423422
let descriptor = TrackDescriptor {
424423
kind: d.kind,

rs/moq-mux/src/catalog/consumer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl<E: CatalogExt> Stream for Consumer<E> {
4949
// MSF carries only the media sections, so the extension defaults.
5050
let media = match ready!(c.poll_next(waiter)) {
5151
Ok(media) => media,
52-
Err(err) => return Poll::Ready(Err(err.into())),
52+
Err(err) => return Poll::Ready(Err(err)),
5353
};
5454
Poll::Ready(Ok(media.map(|m| Catalog::<E> {
5555
video: m.video,

rs/moq-mux/src/catalog/filter.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ impl<S: Stream> Stream for Filter<S> {
147147

148148
/// Apply the active video / audio filters to a raw snapshot, dropping
149149
/// renditions that don't match. Axes with no filter pass through unchanged.
150-
fn apply<E: CatalogExt>(mut catalog: Catalog<E>, video: Option<&FilterVideo>, audio: Option<&FilterAudio>) -> Catalog<E> {
150+
fn apply<E: CatalogExt>(
151+
mut catalog: Catalog<E>,
152+
video: Option<&FilterVideo>,
153+
audio: Option<&FilterAudio>,
154+
) -> Catalog<E> {
151155
if let Some(filter) = video {
152156
catalog.video.renditions.retain(|name, config| {
153157
if let Some(want) = &filter.name

rs/moq-mux/src/catalog/target.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ impl<S: Stream> Stream for Target<S> {
162162

163163
/// Apply the active video / audio targets to a raw snapshot, narrowing each
164164
/// axis to at most one rendition. Axes with no target pass through unchanged.
165-
fn apply<E: CatalogExt>(mut catalog: Catalog<E>, video: Option<&TargetVideo>, audio: Option<&TargetAudio>) -> Catalog<E> {
165+
fn apply<E: CatalogExt>(
166+
mut catalog: Catalog<E>,
167+
video: Option<&TargetVideo>,
168+
audio: Option<&TargetAudio>,
169+
) -> Catalog<E> {
166170
if let Some(target) = video {
167171
if let Some(name) = select_video(&catalog.video.renditions, target) {
168172
let mut kept = BTreeMap::new();

rs/moq-mux/src/container/ts/export_test.rs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,12 @@ async fn export_scte35_roundtrip() {
323323
// Create and write the .scte35 cue track BEFORE moving `broadcast` into
324324
// `Import` (which consumes it); the producer stays alive so the exporter can
325325
// subscribe to the retained track.
326-
let scte = broadcast.unique_track(".scte35", moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE)).unwrap();
326+
let scte = broadcast
327+
.unique_track(
328+
".scte35",
329+
moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE),
330+
)
331+
.unwrap();
327332
let scte_name = scte.name().to_string();
328333
{
329334
let mut cfg = scte35::Config::new();
@@ -349,7 +354,12 @@ async fn export_scte35_roundtrip() {
349354

350355
// `import`, `catalog`, and `scte_producer` stay alive: retained tracks. The
351356
// exporter must carry the extension to see the scte35 section.
352-
let ts = drain_with(Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang).await.unwrap()).await;
357+
let ts = drain_with(
358+
Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang)
359+
.await
360+
.unwrap(),
361+
)
362+
.await;
353363
assert_packet_aligned(&ts);
354364

355365
// The first PMT advertises the SCTE-35 ES (0x86) and the CUEI descriptor.
@@ -390,7 +400,7 @@ async fn export_scte35_roundtrip() {
390400
assert_eq!(snapshot.scte35.renditions.len(), 1, "round-trip lost the SCTE-35 track");
391401
let name = snapshot.scte35.renditions.keys().next().unwrap();
392402

393-
let track = consumer2.track(&name).unwrap().subscribe(None).unwrap().await.unwrap();
403+
let track = consumer2.track(name).unwrap().subscribe(None).unwrap().await.unwrap();
394404
let mut scte_reader = crate::container::Consumer::new(track, HangContainer::Legacy);
395405
let frame = scte_reader
396406
.read()
@@ -415,7 +425,12 @@ async fn scte35_without_video_export_is_rejected() {
415425
.unwrap();
416426

417427
// A scte35 cue track and nothing else.
418-
let scte = broadcast.unique_track(".scte35", moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE)).unwrap();
428+
let scte = broadcast
429+
.unique_track(
430+
".scte35",
431+
moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE),
432+
)
433+
.unwrap();
419434
let scte_name = scte.name().to_string();
420435
{
421436
let mut cfg = scte35::Config::new();
@@ -434,7 +449,9 @@ async fn scte35_without_video_export_is_rejected() {
434449
producer.finish_group().unwrap();
435450
producer.finish().unwrap();
436451

437-
let mut exporter = Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang).await.unwrap();
452+
let mut exporter = Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang)
453+
.await
454+
.unwrap();
438455
let err = loop {
439456
match tokio::time::timeout(std::time::Duration::from_secs(1), exporter.next()).await {
440457
Ok(Ok(Some(_))) => continue,
@@ -563,7 +580,12 @@ async fn scte35_fixtures_survive_roundtrip() {
563580
);
564581

565582
// Export and re-ingest.
566-
let ts = drain_with(Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang).await.unwrap()).await;
583+
let ts = drain_with(
584+
Export::with_scte35(consumer, crate::catalog::CatalogFormat::Hang)
585+
.await
586+
.unwrap(),
587+
)
588+
.await;
567589
assert_packet_aligned(&ts);
568590

569591
let mut broadcast2 = moq_net::BroadcastInfo::new().produce();

rs/moq-mux/src/container/ts/import.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,8 +437,10 @@ impl<E: scte35::Catalog> ScteStream<E> {
437437
// Cues ride the legacy container, which normalizes the per-frame timestamp to
438438
// microseconds on the wire (see `hang::container::Frame::encode`), so the track
439439
// declares that timescale to match.
440-
let track = broadcast
441-
.unique_track(".scte35", moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE))?;
440+
let track = broadcast.unique_track(
441+
".scte35",
442+
moq_net::TrackInfo::default().with_timescale(hang::container::TIMESCALE),
443+
)?;
442444
let mut config = scte35::Config::new();
443445
config.container = hang::catalog::Container::Legacy;
444446
scte35.renditions.insert(track.name().to_string(), config);
@@ -1320,8 +1322,8 @@ mod test {
13201322
#[tokio::test(start_paused = true)]
13211323
async fn scte35_cue_stamped_with_video_pts() {
13221324
use crate::catalog::hang::{Catalog, Container};
1323-
use crate::container::ts::scte35;
13241325
use crate::container::Consumer;
1326+
use crate::container::ts::scte35;
13251327
use moq_net::Timestamp;
13261328

13271329
const VIDEO_PID: u16 = 0x0050;

rs/moq-native/src/tls.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,8 @@ pub(crate) fn server_config(config: &Server, alpn: Vec<Vec<u8>>) -> Result<Arc<r
556556
let certs = Arc::new(certs);
557557

558558
// TCP can negotiate TLS 1.2 as well as 1.3, unlike QUIC which is 1.3-only.
559-
let builder = rustls::ServerConfig::builder_with_provider(provider.clone()).with_safe_default_protocol_versions()?;
559+
let builder =
560+
rustls::ServerConfig::builder_with_provider(provider.clone()).with_safe_default_protocol_versions()?;
560561

561562
let mut tls = if config.root.is_empty() {
562563
builder.with_no_client_auth().with_cert_resolver(certs)

0 commit comments

Comments
 (0)