rust/bt-mcs: Migrate off try_recv and pin futures-channel Pin futures-channel = "=0.3.31" to match the version vendored and pinned by Fuchsia. `UnboundedReceiver::try_recv` does not exist in 0.3.31. Because Cargo.lock is gitignored in this repository, local and CI builds resolved newer versions (0.3.34) from crates.io, masking the compilation failure that occurs when vendored in Fuchsia. Bug: 540400364 Test: cargo test -p bt-mcs, ./presubmit.sh Change-Id: Ibf55456fcbd991c98c9729053d7cccaf8cf63c17 Reviewed-on: https://bluetooth-review.googlesource.com/c/bluetooth/+/3920
diff --git a/rust/Cargo.toml b/rust/Cargo.toml index b0a77c4..076e0b5 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml
@@ -29,6 +29,7 @@ bitfield = "0.19.4" bitflags = "2.11.1" futures = "=0.3.31" +futures-channel = "=0.3.31" futures-test = "=0.3.31" log = { version = "0.4.29", features = ["kv", "std"] } num = { version = "0.4.3", features = ["rand"] }
diff --git a/rust/bt-mcs/Cargo.toml b/rust/bt-mcs/Cargo.toml index 3ada3f7..70e351c 100644 --- a/rust/bt-mcs/Cargo.toml +++ b/rust/bt-mcs/Cargo.toml
@@ -16,3 +16,4 @@ [dev-dependencies] assert_matches.workspace = true bt-gatt = { workspace = true, features = ["test-utils"] } +futures-channel.workspace = true
diff --git a/rust/bt-mcs/src/server.rs b/rust/bt-mcs/src/server.rs index 25e336c..3f49055 100644 --- a/rust/bt-mcs/src/server.rs +++ b/rust/bt-mcs/src/server.rs
@@ -1236,6 +1236,25 @@ assert_matches!(poll_result, Poll::Ready(None)); } + #[track_caller] + fn expect_service_event( + events: &mut futures::channel::mpsc::UnboundedReceiver<FakeServerEvent>, + ) -> FakeServerEvent { + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + match events.poll_next_unpin(&mut cx) { + Poll::Ready(Some(event)) => event, + x => panic!("Expected fake server event, got {x:?}"), + } + } + + #[track_caller] + fn expect_no_service_event( + events: &mut futures::channel::mpsc::UnboundedReceiver<FakeServerEvent>, + ) { + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + assert_matches!(events.poll_next_unpin(&mut cx), Poll::Pending); + } + fn setup_test_server( builder: McsServerBuilder, ) -> ( @@ -1248,7 +1267,10 @@ let mut server: McsServer<FakeTypes> = builder.build().expect("server builds successfully"); server.publish(fake_gatt_server.clone()).expect("publish succeeds"); let _ = server.next().poll_unpin(&mut noop_cx); - assert!(matches!(event_receiver.try_recv().unwrap(), FakeServerEvent::Published { .. })); + assert!(matches!( + expect_service_event(&mut event_receiver), + FakeServerEvent::Published { .. } + )); (server, fake_gatt_server, event_receiver) } @@ -1272,7 +1294,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); (server, fake_gatt_server, event_receiver, noop_cx) } @@ -1289,7 +1311,7 @@ fake_gatt_server.incoming_read(peer, service_id, handle, 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(event_receiver) else { panic!("expected ReadResponded"); }; @@ -1448,7 +1470,7 @@ fake_gatt_server.incoming_read(peer, service_id, handle, 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded for handle {:?}", handle); }; @@ -1482,7 +1504,7 @@ // Must NOT emit any McsServerEvent. assert_matches!(poll_result, Poll::Pending); let bt_gatt::test_utils::FakeServerEvent::WriteResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded for handle {:?}", handle); }; @@ -1510,7 +1532,7 @@ fake_gatt_server.incoming_read(peer, service_id, MEDIA_PLAYER_NAME_HANDLE, 5); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1520,7 +1542,7 @@ fake_gatt_server.incoming_read(peer, service_id, MEDIA_PLAYER_ICON_URL_HANDLE, 8); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1535,7 +1557,7 @@ ); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1545,7 +1567,7 @@ fake_gatt_server.incoming_read(peer, service_id, MEDIA_PLAYER_NAME_HANDLE, 100); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1555,7 +1577,7 @@ fake_gatt_server.incoming_read(peer, service_id, MEDIA_PLAYER_ICON_URL_HANDLE, 100); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1577,7 +1599,7 @@ fake_gatt_server.incoming_read(peer, service_id, TRACK_CHANGED_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1590,7 +1612,7 @@ fake_gatt_server.incoming_read(peer, service_id, MEDIA_CONTROL_POINT_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1603,7 +1625,7 @@ fake_gatt_server.incoming_read(peer, service_id, Handle(999), 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1627,7 +1649,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); fake_gatt_server.incoming_write( peer, @@ -1649,7 +1671,8 @@ assert_eq!(peer_id, peer); assert_eq!(position, TrackPosition::from_raw_10ms(4200)); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1662,7 +1685,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -1673,7 +1696,8 @@ // Subsequent read reflects the updated track position fake_gatt_server.incoming_read(peer, service_id, TRACK_POSITION_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1699,7 +1723,8 @@ ); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1715,7 +1740,8 @@ ); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1741,7 +1767,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); fake_gatt_server.incoming_write( peer, @@ -1760,7 +1786,8 @@ assert_eq!(peer_id, peer); assert_eq!(speed, PlaybackSpeed::HALF); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1771,7 +1798,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -1782,7 +1809,8 @@ // Subsequent read reflects the updated playback speed fake_gatt_server.incoming_read(peer, service_id, PLAYBACK_SPEED_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1802,7 +1830,8 @@ fake_gatt_server.incoming_write(peer, service_id, PLAYBACK_SPEED_HANDLE, 1, vec![0x00]); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1818,7 +1847,8 @@ ); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1846,7 +1876,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); fake_gatt_server.incoming_write( peer, @@ -1865,7 +1895,8 @@ assert_eq!(peer_id, peer); assert_eq!(order, PlayingOrder::ShuffleOnce); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1876,7 +1907,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -1887,7 +1918,8 @@ // Subsequent read reflects the updated playing order fake_gatt_server.incoming_read(peer, service_id, PLAYING_ORDER_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1918,7 +1950,8 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -1927,7 +1960,8 @@ // Value remains unchanged (InOrderOnce) fake_gatt_server.incoming_read(peer, service_id, PLAYING_ORDER_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -1960,7 +1994,8 @@ fake_gatt_server.incoming_write(peer, service_id, handle, 0, value); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded for handle {:?}", handle); }; @@ -1993,7 +2028,8 @@ assert_matches!(poll_result, Poll::Pending); // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2002,7 +2038,7 @@ // Immediate Media Control Point Notification sent with OPCODE_NOT_SUPPORTED // (0x02) let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2031,7 +2067,8 @@ assert_matches!(poll_result, Poll::Pending); // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2040,7 +2077,7 @@ // Immediate Media Control Point Notification sent with MEDIA_PLAYER_INACTIVE // (0x03) let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2075,7 +2112,8 @@ assert_eq!(opcode, MediaControlOpcode::Pause); // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2088,7 +2126,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2122,7 +2160,8 @@ }; assert_eq!(rx_opcode, opcode); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2132,7 +2171,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2162,14 +2201,15 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; assert!(value.is_ok()); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2195,7 +2235,8 @@ ); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2205,7 +2246,8 @@ fake_gatt_server.incoming_write(peer, service_id, MEDIA_CONTROL_POINT_HANDLE, 0, vec![]); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2236,14 +2278,15 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; assert!(value.is_ok()); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2284,7 +2327,8 @@ assert_eq!(opcode, MediaControlOpcode::Stop); // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2297,7 +2341,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2323,7 +2367,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); // Issue 1st command (Play from peer1) fake_gatt_server.incoming_write( @@ -2365,14 +2409,14 @@ // Drain write acknowledgements let FakeServerEvent::WriteResponded { value: val1, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected 1st WriteResponded"); }; assert!(val1.is_ok()); let FakeServerEvent::WriteResponded { value: val2, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected 2nd WriteResponded"); }; @@ -2387,8 +2431,8 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let n1 = event_receiver.try_recv().unwrap(); - let n2 = event_receiver.try_recv().unwrap(); + let n1 = expect_service_event(&mut event_receiver); + let n2 = expect_service_event(&mut event_receiver); let mut received = Vec::new(); for event in [n1, n2] { @@ -2412,7 +2456,7 @@ ))); // No further events pending - assert_matches!(event_receiver.try_recv(), Err(_)); + expect_no_service_event(&mut event_receiver); } #[test] @@ -2441,7 +2485,8 @@ assert_eq!(opcode, MediaControlOpcode::Pause); // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2472,7 +2517,7 @@ assert_matches!(poll_result, Poll::Ready(None)); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2498,7 +2543,7 @@ bt_gatt::server::NotificationType::Notify, ); let _ = server.next().poll_unpin(&mut noop_cx); - let _ = event_receiver.try_recv(); + expect_no_service_event(&mut event_receiver); // Negative value represents offset from end of track per MCS v1.0.1 Section // 3.7.1 @@ -2522,7 +2567,8 @@ assert_eq!(peer_id, peer); assert_eq!(position, TrackPosition::from_raw_10ms(-500)); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2533,7 +2579,7 @@ let _ = server.next().poll_unpin(&mut noop_cx); let FakeServerEvent::Notified { handle, value, peers, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected Notified"); }; @@ -2544,7 +2590,8 @@ // Subsequent read reflects the updated track position fake_gatt_server.incoming_read(peer, service_id, TRACK_POSITION_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -2571,7 +2618,8 @@ panic!("expected SetPlaybackSpeed event, got {poll_result:?}"); }; // ATT write is acknowledged - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2582,12 +2630,13 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); // No notification should be emitted - assert_matches!(event_receiver.try_recv(), Err(_)); + expect_no_service_event(&mut event_receiver); // Playback speed remains unchanged fake_gatt_server.incoming_read(peer, service_id, PLAYBACK_SPEED_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -2606,7 +2655,8 @@ else { panic!("expected SetTrackPosition event, got {poll_result:?}"); }; - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2615,12 +2665,13 @@ drop(responder); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - assert_matches!(event_receiver.try_recv(), Err(_)); + expect_no_service_event(&mut event_receiver); // Track position remains unavailable fake_gatt_server.incoming_read(peer, service_id, TRACK_POSITION_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -2639,7 +2690,8 @@ else { panic!("expected SetPlayingOrder event, got {poll_result:?}"); }; - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2648,12 +2700,13 @@ drop(responder); let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - assert_matches!(event_receiver.try_recv(), Err(_)); + expect_no_service_event(&mut event_receiver); // Playing order remains default InOrderOnce fake_gatt_server.incoming_read(peer, service_id, PLAYING_ORDER_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -2677,7 +2730,8 @@ let poll_result = server.next().poll_unpin(&mut noop_cx); assert_matches!(poll_result, Poll::Pending); - let FakeServerEvent::WriteResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::WriteResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected WriteResponded"); }; @@ -2686,7 +2740,8 @@ // Value remains unchanged (default InOrderOnce) fake_gatt_server.incoming_read(peer, service_id, PLAYING_ORDER_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); - let FakeServerEvent::ReadResponded { value, .. } = event_receiver.try_recv().unwrap() + let FakeServerEvent::ReadResponded { value, .. } = + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); }; @@ -2839,7 +2894,7 @@ fake_gatt_server.incoming_read(peer, service_id, TRACK_POSITION_HANDLE, 0); let _ = server.next().poll_unpin(&mut noop_cx); let bt_gatt::test_utils::FakeServerEvent::ReadResponded { value, .. } = - event_receiver.try_recv().unwrap() + expect_service_event(&mut event_receiver) else { panic!("expected ReadResponded"); };