datachannel: Check we transition the state properly on remote close

Existing test would only check the channel was not open instead of
checking for a proper transition to closing then closed.

Bug: webrtc:12614
Change-Id: Iab74d6252ca1411c0fe8c1ee4ca09bc6d81af90c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/216388
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Florent Castelli <orphis@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33874}
This commit is contained in:
Florent Castelli 2021-04-29 12:49:25 +02:00 committed by WebRTC LUCI CQ
parent 748550d6ce
commit 141a4de072
2 changed files with 25 additions and 6 deletions

View File

@ -362,8 +362,22 @@ TEST_P(DataChannelIntegrationTest, CalleeClosesSctpDataChannel) {
// Close the data channel on the callee side, and wait for it to reach the
// "closed" state on both sides.
callee()->data_channel()->Close();
EXPECT_TRUE_WAIT(!caller()->data_observer()->IsOpen(), kDefaultTimeout);
EXPECT_TRUE_WAIT(!callee()->data_observer()->IsOpen(), kDefaultTimeout);
DataChannelInterface::DataState expected_states[] = {
DataChannelInterface::DataState::kConnecting,
DataChannelInterface::DataState::kOpen,
DataChannelInterface::DataState::kClosing,
DataChannelInterface::DataState::kClosed};
EXPECT_EQ_WAIT(DataChannelInterface::DataState::kClosed,
caller()->data_observer()->state(), kDefaultTimeout);
EXPECT_THAT(caller()->data_observer()->states(),
::testing::ElementsAreArray(expected_states));
EXPECT_EQ_WAIT(DataChannelInterface::DataState::kClosed,
callee()->data_observer()->state(), kDefaultTimeout);
EXPECT_THAT(callee()->data_observer()->states(),
::testing::ElementsAreArray(expected_states));
}
TEST_P(DataChannelIntegrationTest, SctpDataChannelConfigSentToOtherSide) {

View File

@ -359,20 +359,20 @@ class MockDataChannelObserver : public webrtc::DataChannelObserver {
explicit MockDataChannelObserver(webrtc::DataChannelInterface* channel)
: channel_(channel) {
channel_->RegisterObserver(this);
state_ = channel_->state();
states_.push_back(channel_->state());
}
virtual ~MockDataChannelObserver() { channel_->UnregisterObserver(); }
void OnBufferedAmountChange(uint64_t previous_amount) override {}
void OnStateChange() override { state_ = channel_->state(); }
void OnStateChange() override { states_.push_back(channel_->state()); }
void OnMessage(const DataBuffer& buffer) override {
messages_.push_back(
{std::string(buffer.data.data<char>(), buffer.data.size()),
buffer.binary});
}
bool IsOpen() const { return state_ == DataChannelInterface::kOpen; }
bool IsOpen() const { return state() == DataChannelInterface::kOpen; }
std::vector<Message> messages() const { return messages_; }
std::string last_message() const {
if (messages_.empty())
@ -387,9 +387,14 @@ class MockDataChannelObserver : public webrtc::DataChannelObserver {
}
size_t received_message_count() const { return messages_.size(); }
DataChannelInterface::DataState state() const { return states_.back(); }
const std::vector<DataChannelInterface::DataState>& states() const {
return states_;
}
private:
rtc::scoped_refptr<webrtc::DataChannelInterface> channel_;
DataChannelInterface::DataState state_;
std::vector<DataChannelInterface::DataState> states_;
std::vector<Message> messages_;
};