Rewrite the remaining few WebRtcSession tests.

Bug: webrtc:8222
Change-Id: I18e2a449b77cee2ecb8c0c2ae94c105247116458
Reviewed-on: https://webrtc-review.googlesource.com/8740
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20399}
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
index ff5cea5..c040854 100644
--- a/pc/channel_unittest.cc
+++ b/pc/channel_unittest.cc
@@ -2051,6 +2051,35 @@
     EXPECT_EQ(-1, media_channel1_->max_bps());
   }
 
+  // Test that when a channel gets new transports with a call to
+  // |SetTransports|, the socket options from the old transports are merged with
+  // the options on the new transport.
+  // For example, audio and video may use separate socket options, but initially
+  // be unbundled, then later become bundled. When this happens, their preferred
+  // socket options should be merged to the underlying transport they share.
+  void SocketOptionsMergedOnSetTransport() {
+    constexpr int kSndBufSize = 4000;
+    constexpr int kRcvBufSize = 8000;
+
+    CreateChannels(0, 0);
+
+    channel1_->SetOption(cricket::BaseChannel::ST_RTP,
+                         rtc::Socket::Option::OPT_SNDBUF, kSndBufSize);
+    channel2_->SetOption(cricket::BaseChannel::ST_RTP,
+                         rtc::Socket::Option::OPT_RCVBUF, kRcvBufSize);
+
+    channel1_->SetTransports(channel2_->rtp_dtls_transport(),
+                             channel2_->rtcp_dtls_transport());
+
+    int option_val;
+    ASSERT_TRUE(channel1_->rtp_dtls_transport()->GetOption(
+        rtc::Socket::Option::OPT_SNDBUF, &option_val));
+    EXPECT_EQ(kSndBufSize, option_val);
+    ASSERT_TRUE(channel1_->rtp_dtls_transport()->GetOption(
+        rtc::Socket::Option::OPT_RCVBUF, &option_val));
+    EXPECT_EQ(kRcvBufSize, option_val);
+  }
+
  protected:
   void WaitForThreads() { WaitForThreads(rtc::ArrayView<rtc::Thread*>()); }
   static void ProcessThreadQueue(rtc::Thread* thread) {
@@ -2617,6 +2646,10 @@
   Base::CanChangeMaxBitrate();
 }
 
+TEST_F(VoiceChannelSingleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 // VoiceChannelDoubleThreadTest
 TEST_F(VoiceChannelDoubleThreadTest, TestInit) {
   Base::TestInit();
@@ -2976,6 +3009,10 @@
   Base::CanChangeMaxBitrate();
 }
 
+TEST_F(VoiceChannelDoubleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 // VideoChannelSingleThreadTest
 TEST_F(VideoChannelSingleThreadTest, TestInit) {
   Base::TestInit();
@@ -3207,6 +3244,10 @@
   Base::CanChangeMaxBitrate();
 }
 
+TEST_F(VideoChannelSingleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 // VideoChannelDoubleThreadTest
 TEST_F(VideoChannelDoubleThreadTest, TestInit) {
   Base::TestInit();
@@ -3438,6 +3479,10 @@
   Base::CanChangeMaxBitrate();
 }
 
+TEST_F(VideoChannelDoubleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 // RtpDataChannelSingleThreadTest
 class RtpDataChannelSingleThreadTest : public ChannelTest<DataTraits> {
  public:
@@ -3634,6 +3679,10 @@
   Base::TestMediaMonitor();
 }
 
+TEST_F(RtpDataChannelSingleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 TEST_F(RtpDataChannelSingleThreadTest, TestSendData) {
   CreateChannels(0, 0);
   EXPECT_TRUE(SendInitiate());
@@ -3766,6 +3815,10 @@
   Base::TestMediaMonitor();
 }
 
+TEST_F(RtpDataChannelDoubleThreadTest, SocketOptionsMergedOnSetTransport) {
+  Base::SocketOptionsMergedOnSetTransport();
+}
+
 TEST_F(RtpDataChannelDoubleThreadTest, TestSendData) {
   CreateChannels(0, 0);
   EXPECT_TRUE(SendInitiate());