summaryrefslogtreecommitdiff
path: root/app/webrtc/mediastreamsignaling_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'app/webrtc/mediastreamsignaling_unittest.cc')
-rw-r--r--app/webrtc/mediastreamsignaling_unittest.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/app/webrtc/mediastreamsignaling_unittest.cc b/app/webrtc/mediastreamsignaling_unittest.cc
index 14b68e9..150058e 100644
--- a/app/webrtc/mediastreamsignaling_unittest.cc
+++ b/app/webrtc/mediastreamsignaling_unittest.cc
@@ -1141,6 +1141,47 @@ TEST_F(MediaStreamSignalingTest, SctpIdAllocationNoReuse) {
EXPECT_NE(old_id, new_id);
}
+// Verifies that SCTP ids of removed DataChannels can be reused.
+TEST_F(MediaStreamSignalingTest, SctpIdReusedForRemovedDataChannel) {
+ int odd_id = 1;
+ int even_id = 0;
+ AddDataChannel(cricket::DCT_SCTP, "a", odd_id);
+ AddDataChannel(cricket::DCT_SCTP, "a", even_id);
+
+ int allocated_id = -1;
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_SERVER,
+ &allocated_id));
+ EXPECT_EQ(odd_id + 2, allocated_id);
+ AddDataChannel(cricket::DCT_SCTP, "a", allocated_id);
+
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_CLIENT,
+ &allocated_id));
+ EXPECT_EQ(even_id + 2, allocated_id);
+ AddDataChannel(cricket::DCT_SCTP, "a", allocated_id);
+
+ signaling_->RemoveSctpDataChannel(odd_id);
+ signaling_->RemoveSctpDataChannel(even_id);
+
+ // Verifies that removed DataChannel ids are reused.
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_SERVER,
+ &allocated_id));
+ EXPECT_EQ(odd_id, allocated_id);
+
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_CLIENT,
+ &allocated_id));
+ EXPECT_EQ(even_id, allocated_id);
+
+ // Verifies that used higher DataChannel ids are not reused.
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_SERVER,
+ &allocated_id));
+ EXPECT_NE(odd_id + 2, allocated_id);
+
+ ASSERT_TRUE(signaling_->AllocateSctpSid(talk_base::SSL_CLIENT,
+ &allocated_id));
+ EXPECT_NE(even_id + 2, allocated_id);
+
+}
+
// Verifies that duplicated label is not allowed for RTP data channel.
TEST_F(MediaStreamSignalingTest, RtpDuplicatedLabelNotAllowed) {
AddDataChannel(cricket::DCT_RTP, "a", -1);