Deflake RTSP keep-alive monitor test

Alters RTSP KeepAlive monitor test to just make sure that keep-alive message is sent.

The test was added in 42c1846984

#minor-release

PiperOrigin-RevId: 571349013
(cherry picked from commit 417970f713)
This commit is contained in:
michaelkatz 2023-10-06 08:48:58 -07:00 committed by oceanjules
parent efb8c70a4b
commit f776021dcc

View file

@ -57,7 +57,6 @@ import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowLooper;
/** Playback testing for RTSP. */ /** Playback testing for RTSP. */
@Config(sdk = 29) @Config(sdk = 29)
@ -110,8 +109,7 @@ public final class RtspPlaybackTest {
RtspMessageUtil.DEFAULT_RTSP_TIMEOUT_MS, RtspMessageUtil.DEFAULT_RTSP_TIMEOUT_MS,
/* optionsRequestCounter= */ Optional.empty()); /* optionsRequestCounter= */ Optional.empty());
rtspServer = new RtspServer(responseProvider); rtspServer = new RtspServer(responseProvider);
ExoPlayer player = ExoPlayer player = createExoPlayer(rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
createExoPlayer(clock, rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory); PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
player.prepare(); player.prepare();
@ -136,8 +134,7 @@ public final class RtspPlaybackTest {
fakeRtpDataChannel, fakeRtpDataChannel,
RtspMessageUtil.DEFAULT_RTSP_TIMEOUT_MS, RtspMessageUtil.DEFAULT_RTSP_TIMEOUT_MS,
/* optionsRequestCounter= */ Optional.empty())); /* optionsRequestCounter= */ Optional.empty()));
ExoPlayer player = ExoPlayer player = createExoPlayer(rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
createExoPlayer(clock, rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
AtomicReference<Throwable> playbackError = new AtomicReference<>(); AtomicReference<Throwable> playbackError = new AtomicReference<>();
player.prepare(); player.prepare();
@ -169,7 +166,7 @@ public final class RtspPlaybackTest {
new UdpDataSourceRtpDataChannelFactory(DEFAULT_TIMEOUT_MS), rtpTcpDataChannelFactory); new UdpDataSourceRtpDataChannelFactory(DEFAULT_TIMEOUT_MS), rtpTcpDataChannelFactory);
rtspServer = new RtspServer(responseProviderSupportingOnlyTcp); rtspServer = new RtspServer(responseProviderSupportingOnlyTcp);
ExoPlayer player = ExoPlayer player =
createExoPlayer(clock, rtspServer.startAndGetPortNumber(), forwardingRtpDataChannelFactory); createExoPlayer(rtspServer.startAndGetPortNumber(), forwardingRtpDataChannelFactory);
PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory); PlaybackOutput playbackOutput = PlaybackOutput.register(player, capturingRenderersFactory);
player.prepare(); player.prepare();
@ -194,8 +191,7 @@ public final class RtspPlaybackTest {
ImmutableList.of(aacRtpPacketStreamDump, mpeg2tsRtpPacketStreamDump), ImmutableList.of(aacRtpPacketStreamDump, mpeg2tsRtpPacketStreamDump),
fakeUdpRtpDataChannel); fakeUdpRtpDataChannel);
rtspServer = new RtspServer(responseProvider); rtspServer = new RtspServer(responseProvider);
ExoPlayer player = ExoPlayer player = createExoPlayer(rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
createExoPlayer(clock, rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
AtomicReference<PlaybackException> playbackError = new AtomicReference<>(); AtomicReference<PlaybackException> playbackError = new AtomicReference<>();
player.prepare(); player.prepare();
@ -232,7 +228,7 @@ public final class RtspPlaybackTest {
new ForwardingRtpDataChannelFactory(rtpDataChannelFactory, rtpDataChannelFactory); new ForwardingRtpDataChannelFactory(rtpDataChannelFactory, rtpDataChannelFactory);
rtspServer = new RtspServer(responseProviderSupportingOnlyTcp); rtspServer = new RtspServer(responseProviderSupportingOnlyTcp);
ExoPlayer player = ExoPlayer player =
createExoPlayer(clock, rtspServer.startAndGetPortNumber(), forwardingRtpDataChannelFactory); createExoPlayer(rtspServer.startAndGetPortNumber(), forwardingRtpDataChannelFactory);
AtomicReference<PlaybackException> playbackError = new AtomicReference<>(); AtomicReference<PlaybackException> playbackError = new AtomicReference<>();
player.prepare(); player.prepare();
@ -257,34 +253,29 @@ public final class RtspPlaybackTest {
throws Exception { throws Exception {
FakeUdpDataSourceRtpDataChannel fakeRtpDataChannel = new FakeUdpDataSourceRtpDataChannel(); FakeUdpDataSourceRtpDataChannel fakeRtpDataChannel = new FakeUdpDataSourceRtpDataChannel();
RtpDataChannel.Factory rtpDataChannelFactory = (trackId) -> fakeRtpDataChannel; RtpDataChannel.Factory rtpDataChannelFactory = (trackId) -> fakeRtpDataChannel;
FakeClock fakeClock = new FakeClock(/* initialTimeMs= */ 0, true);
Optional<AtomicInteger> optionsRequestCounter = Optional.of(new AtomicInteger()); Optional<AtomicInteger> optionsRequestCounter = Optional.of(new AtomicInteger());
ResponseProvider responseProvider = ResponseProvider responseProvider =
new ResponseProvider( new ResponseProvider(
fakeClock, clock,
ImmutableList.of(aacRtpPacketStreamDump), ImmutableList.of(aacRtpPacketStreamDump),
fakeRtpDataChannel, fakeRtpDataChannel,
/* sessionTimeoutMs= */ 30_000L, /* sessionTimeoutMs= */ 300L,
optionsRequestCounter); optionsRequestCounter);
rtspServer = new RtspServer(responseProvider); rtspServer = new RtspServer(responseProvider);
ExoPlayer player = ExoPlayer player = createExoPlayer(rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
createExoPlayer(fakeClock, rtspServer.startAndGetPortNumber(), rtpDataChannelFactory);
player.prepare(); player.prepare();
player.play(); player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_READY); TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_READY);
// Reset optionsRequestCounter to count requests made by the keep-alive monitor // Reset optionsRequestCounter to count requests made by the keep-alive monitor
optionsRequestCounter.get().getAndSet(0); optionsRequestCounter.get().getAndSet(0);
fakeClock.advanceTime(/* timeDiffMs= */ 16_000L); RobolectricUtil.runMainLooperUntil(() -> optionsRequestCounter.get().get() != 0);
ShadowLooper.idleMainLooper();
assertThat(optionsRequestCounter.get().get()).isEqualTo(1);
player.release(); player.release();
} }
private ExoPlayer createExoPlayer( private ExoPlayer createExoPlayer(
Clock clock, int serverRtspPortNumber, RtpDataChannel.Factory rtpDataChannelFactory) { int serverRtspPortNumber, RtpDataChannel.Factory rtpDataChannelFactory) {
ExoPlayer player = ExoPlayer player =
new ExoPlayer.Builder(applicationContext, capturingRenderersFactory) new ExoPlayer.Builder(applicationContext, capturingRenderersFactory)
.setClock(clock) .setClock(clock)