From 06f532466513a933e905b1477aaa64dec68aa87c Mon Sep 17 00:00:00 2001 From: ibaker Date: Thu, 7 Sep 2023 07:57:31 -0700 Subject: [PATCH] Deflake `MediaSessionServiceTest.addSessions_removedWhenReleased` While investigating a different test failure on a pending change I noticed that sometimes the "testAddSessions_removedWhenClose" session was being released before it could be fully connected - and this results in a failure like: ``` expected not to contain: androidx.media3.session.MediaSession@50a9ef1 but was : [androidx.media3.session.MediaSession@50a9ef1, androidx.media3.session.MediaSession@3a6bac] at androidx.media3.session.MediaSessionServiceTest.addSessions_removedWhenReleased(MediaSessionServiceTest.java:376) ``` It also shows up in the logs like: ``` MediaController future failed (so we couldn't release it) ... Caused by: java.lang.SecurityException: Session rejected the connection request. ``` Adding some debug logging revealed that the `session.release` call posted to the test thread was happening before the call to `MediaSessionStub.connect` on the main thread (this is triggered deep in prod media3 session logic). PiperOrigin-RevId: 563431265 --- .../java/androidx/media3/session/MediaSessionServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java index e54c1191b8..989d1cddf7 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaSessionServiceTest.java @@ -367,6 +367,8 @@ public class MediaSessionServiceTest { MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance(); MediaSession session = createMediaSession("testAddSessions_removedWhenReleased"); service.addSession(session); + // Wait until connection of session is propagated. + MainLooperTestRule.runOnMainSync(() -> {}); List sessions = service.getSessions(); assertThat(sessions.contains(session)).isTrue(); assertThat(sessions.size()).isEqualTo(2);