| Index: webrtc/media/engine/webrtcvideoengine_unittest.cc | 
| diff --git a/webrtc/media/engine/webrtcvideoengine_unittest.cc b/webrtc/media/engine/webrtcvideoengine_unittest.cc | 
| index c6adfd3976fa6b89d95223ec0c1eac001364c0b6..1306082abf8715b2733109ce4c3f2ad4c1f884cd 100644 | 
| --- a/webrtc/media/engine/webrtcvideoengine_unittest.cc | 
| +++ b/webrtc/media/engine/webrtcvideoengine_unittest.cc | 
| @@ -83,6 +83,32 @@ bool HasRtxCodec(const std::vector<cricket::VideoCodec>& codecs, | 
| return false; | 
| } | 
|  | 
| +// TODO(nisse): Duplicated in call.cc. | 
| +const int* FindKeyByValue(const std::map<int, int>& m, int v) { | 
| +  for (const auto& kv : m) { | 
| +    if (kv.second == v) | 
| +      return &kv.first; | 
| +  } | 
| +  return nullptr; | 
| +} | 
| + | 
| +bool HasRtxReceiveAssociation( | 
| +    const webrtc::VideoReceiveStream::Config& config, | 
| +    int payload_type) { | 
| +  return FindKeyByValue(config.rtp.rtx_associated_payload_types, | 
| +                        payload_type) != nullptr; | 
| +} | 
| + | 
| +// Check that there's an Rtx payload type for each decoder. | 
| +bool VerifyRtxReceiveAssociations( | 
| +    const webrtc::VideoReceiveStream::Config& config) { | 
| +  for (const auto& decoder : config.decoders) { | 
| +    if (!HasRtxReceiveAssociation(config, decoder.payload_type)) | 
| +      return false; | 
| +  } | 
| +  return true; | 
| +} | 
| + | 
| rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateBlackFrameBuffer( | 
| int width, | 
| int height) { | 
| @@ -112,15 +138,6 @@ cricket::MediaConfig GetMediaConfig() { | 
| return media_config; | 
| } | 
|  | 
| -// TODO(nisse): Duplicated in call.cc. | 
| -const int* FindKeyByValue(const std::map<int, int>& m, int v) { | 
| -  for (const auto& kv : m) { | 
| -    if (kv.second == v) | 
| -      return &kv.first; | 
| -  } | 
| -  return nullptr; | 
| -} | 
| - | 
| }  // namespace | 
|  | 
| namespace cricket { | 
| @@ -1316,9 +1333,12 @@ TEST_F(WebRtcVideoChannelTest, RecvStreamWithSimAndRtx) { | 
| cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs)); | 
| EXPECT_FALSE( | 
| recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty()); | 
| -  EXPECT_EQ(recv_stream->GetConfig().decoders.size(), | 
| -            recv_stream->GetConfig().rtp.rtx_associated_payload_types.size()) | 
| +  EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig())) | 
| << "RTX should be mapped for all decoders/payload types."; | 
| +  EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(), | 
| +                                          GetEngineCodec("red").id)) | 
| +      << "RTX should be mapped for the RED payload type"; | 
| + | 
| EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 
| } | 
|  | 
| @@ -1329,6 +1349,12 @@ TEST_F(WebRtcVideoChannelTest, RecvStreamWithRtx) { | 
| params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]); | 
| FakeVideoReceiveStream* recv_stream = AddRecvStream(params); | 
| EXPECT_EQ(kRtxSsrcs1[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 
| + | 
| +  EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig())) | 
| +      << "RTX should be mapped for all decoders/payload types."; | 
| +  EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(), | 
| +                                          GetEngineCodec("red").id)) | 
| +      << "RTX should be mapped for the RED payload type"; | 
| } | 
|  | 
| TEST_F(WebRtcVideoChannelTest, RecvStreamNoRtx) { | 
| @@ -3796,9 +3822,11 @@ TEST_F(WebRtcVideoChannelTest, DefaultReceiveStreamReconfiguresToUseRtx) { | 
| recv_stream = fake_call_->GetVideoReceiveStreams()[0]; | 
| EXPECT_FALSE( | 
| recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty()); | 
| -  EXPECT_EQ(recv_stream->GetConfig().decoders.size(), | 
| -            recv_stream->GetConfig().rtp.rtx_associated_payload_types.size()) | 
| +  EXPECT_TRUE(VerifyRtxReceiveAssociations(recv_stream->GetConfig())) | 
| << "RTX should be mapped for all decoders/payload types."; | 
| +  EXPECT_TRUE(HasRtxReceiveAssociation(recv_stream->GetConfig(), | 
| +                                          GetEngineCodec("red").id)) | 
| +      << "RTX should be mapped also for the RED payload type"; | 
| EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc); | 
| } | 
|  | 
|  |