OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 13 matching lines...) Expand all Loading... |
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 */ | 26 */ |
27 | 27 |
28 #include "talk/app/webrtc/datachannel.h" | 28 #include "talk/app/webrtc/datachannel.h" |
29 #include "talk/app/webrtc/sctputils.h" | 29 #include "talk/app/webrtc/sctputils.h" |
30 #include "talk/app/webrtc/test/fakedatachannelprovider.h" | 30 #include "talk/app/webrtc/test/fakedatachannelprovider.h" |
31 #include "webrtc/base/gunit.h" | 31 #include "webrtc/base/gunit.h" |
32 | 32 |
33 using webrtc::DataChannel; | 33 using webrtc::DataChannel; |
34 using webrtc::SctpSidAllocator; | |
35 | 34 |
36 class FakeDataChannelObserver : public webrtc::DataChannelObserver { | 35 class FakeDataChannelObserver : public webrtc::DataChannelObserver { |
37 public: | 36 public: |
38 FakeDataChannelObserver() | 37 FakeDataChannelObserver() |
39 : messages_received_(0), | 38 : messages_received_(0), |
40 on_state_change_count_(0), | 39 on_state_change_count_(0), |
41 on_buffered_amount_change_count_(0) {} | 40 on_buffered_amount_change_count_(0) {} |
42 | 41 |
43 void OnStateChange() { | 42 void OnStateChange() { |
44 ++on_state_change_count_; | 43 ++on_state_change_count_; |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 EXPECT_EQ(webrtc::DataChannelInterface::kOpen, | 499 EXPECT_EQ(webrtc::DataChannelInterface::kOpen, |
501 webrtc_data_channel_->state()); | 500 webrtc_data_channel_->state()); |
502 } | 501 } |
503 | 502 |
504 // Tests that a channel can be closed without being opened or assigned an sid. | 503 // Tests that a channel can be closed without being opened or assigned an sid. |
505 TEST_F(SctpDataChannelTest, NeverOpened) { | 504 TEST_F(SctpDataChannelTest, NeverOpened) { |
506 provider_.set_transport_available(true); | 505 provider_.set_transport_available(true); |
507 webrtc_data_channel_->OnTransportChannelCreated(); | 506 webrtc_data_channel_->OnTransportChannelCreated(); |
508 webrtc_data_channel_->Close(); | 507 webrtc_data_channel_->Close(); |
509 } | 508 } |
510 | |
511 class SctpSidAllocatorTest : public testing::Test { | |
512 protected: | |
513 SctpSidAllocator allocator_; | |
514 }; | |
515 | |
516 // Verifies that an even SCTP id is allocated for SSL_CLIENT and an odd id for | |
517 // SSL_SERVER. | |
518 TEST_F(SctpSidAllocatorTest, SctpIdAllocationBasedOnRole) { | |
519 int id; | |
520 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &id)); | |
521 EXPECT_EQ(1, id); | |
522 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &id)); | |
523 EXPECT_EQ(0, id); | |
524 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &id)); | |
525 EXPECT_EQ(3, id); | |
526 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &id)); | |
527 EXPECT_EQ(2, id); | |
528 } | |
529 | |
530 // Verifies that SCTP ids of existing DataChannels are not reused. | |
531 TEST_F(SctpSidAllocatorTest, SctpIdAllocationNoReuse) { | |
532 int old_id = 1; | |
533 EXPECT_TRUE(allocator_.ReserveSid(old_id)); | |
534 | |
535 int new_id; | |
536 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &new_id)); | |
537 EXPECT_NE(old_id, new_id); | |
538 | |
539 old_id = 0; | |
540 EXPECT_TRUE(allocator_.ReserveSid(old_id)); | |
541 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &new_id)); | |
542 EXPECT_NE(old_id, new_id); | |
543 } | |
544 | |
545 // Verifies that SCTP ids of removed DataChannels can be reused. | |
546 TEST_F(SctpSidAllocatorTest, SctpIdReusedForRemovedDataChannel) { | |
547 int odd_id = 1; | |
548 int even_id = 0; | |
549 EXPECT_TRUE(allocator_.ReserveSid(odd_id)); | |
550 EXPECT_TRUE(allocator_.ReserveSid(even_id)); | |
551 | |
552 int allocated_id = -1; | |
553 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &allocated_id)); | |
554 EXPECT_EQ(odd_id + 2, allocated_id); | |
555 | |
556 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &allocated_id)); | |
557 EXPECT_EQ(even_id + 2, allocated_id); | |
558 | |
559 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &allocated_id)); | |
560 EXPECT_EQ(odd_id + 4, allocated_id); | |
561 | |
562 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &allocated_id)); | |
563 EXPECT_EQ(even_id + 4, allocated_id); | |
564 | |
565 allocator_.ReleaseSid(odd_id); | |
566 allocator_.ReleaseSid(even_id); | |
567 | |
568 // Verifies that removed ids are reused. | |
569 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &allocated_id)); | |
570 EXPECT_EQ(odd_id, allocated_id); | |
571 | |
572 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &allocated_id)); | |
573 EXPECT_EQ(even_id, allocated_id); | |
574 | |
575 // Verifies that used higher ids are not reused. | |
576 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_SERVER, &allocated_id)); | |
577 EXPECT_EQ(odd_id + 6, allocated_id); | |
578 | |
579 EXPECT_TRUE(allocator_.AllocateSid(rtc::SSL_CLIENT, &allocated_id)); | |
580 EXPECT_EQ(even_id + 6, allocated_id); | |
581 } | |
OLD | NEW |