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
This commit is contained in:
ibaker 2023-09-07 07:57:31 -07:00 committed by Copybara-Service
parent b958f451a7
commit 06f5324665

View File

@ -367,6 +367,8 @@ public class MediaSessionServiceTest {
MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance(); MediaSessionService service = TestServiceRegistry.getInstance().getServiceInstance();
MediaSession session = createMediaSession("testAddSessions_removedWhenReleased"); MediaSession session = createMediaSession("testAddSessions_removedWhenReleased");
service.addSession(session); service.addSession(session);
// Wait until connection of session is propagated.
MainLooperTestRule.runOnMainSync(() -> {});
List<MediaSession> sessions = service.getSessions(); List<MediaSession> sessions = service.getSessions();
assertThat(sessions.contains(session)).isTrue(); assertThat(sessions.contains(session)).isTrue();
assertThat(sessions.size()).isEqualTo(2); assertThat(sessions.size()).isEqualTo(2);