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:
parent
748550d6ce
commit
141a4de072
@ -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) {
|
||||
|
||||
@ -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_;
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user