webrtc/net/dcsctp/socket/mock_context.h
Victor Boivie 8df32eb0e1 dcsctp: Add API to indicate packet send status
Before this change, there was no way for a client to indicate to the
dcSCTP library if a packet that was supposed to be sent, was actually
sent. It was assumed that it always was.

To handle temporary failures better, such as retrying to send packets
that failed to be sent when the send buffer was full, this information
is propagated to the library.

Note that this change only covers the API and adaptations to clients.
The actual implementation to make use of this information is done as a
follow-up change.

Bug: webrtc:12943
Change-Id: I8f9c62e17f1de1566fa6b0f13a57a3db9f4e7684
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/228563
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34767}
2021-08-16 11:29:47 +00:00

72 lines
2.7 KiB
C++

/*
* Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef NET_DCSCTP_SOCKET_MOCK_CONTEXT_H_
#define NET_DCSCTP_SOCKET_MOCK_CONTEXT_H_
#include <cstdint>
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "net/dcsctp/packet/sctp_packet.h"
#include "net/dcsctp/public/dcsctp_options.h"
#include "net/dcsctp/public/dcsctp_socket.h"
#include "net/dcsctp/socket/context.h"
#include "net/dcsctp/socket/mock_dcsctp_socket_callbacks.h"
#include "test/gmock.h"
namespace dcsctp {
class MockContext : public Context {
public:
static constexpr TSN MyInitialTsn() { return TSN(990); }
static constexpr TSN PeerInitialTsn() { return TSN(10); }
static constexpr VerificationTag PeerVerificationTag() {
return VerificationTag(0x01234567);
}
explicit MockContext(MockDcSctpSocketCallbacks* callbacks)
: callbacks_(*callbacks) {
ON_CALL(*this, is_connection_established)
.WillByDefault(testing::Return(true));
ON_CALL(*this, my_initial_tsn)
.WillByDefault(testing::Return(MyInitialTsn()));
ON_CALL(*this, peer_initial_tsn)
.WillByDefault(testing::Return(PeerInitialTsn()));
ON_CALL(*this, callbacks).WillByDefault(testing::ReturnRef(callbacks_));
ON_CALL(*this, current_rto).WillByDefault(testing::Return(DurationMs(123)));
ON_CALL(*this, Send).WillByDefault([this](SctpPacket::Builder& builder) {
callbacks_.SendPacketWithStatus(builder.Build());
});
}
MOCK_METHOD(bool, is_connection_established, (), (const, override));
MOCK_METHOD(TSN, my_initial_tsn, (), (const, override));
MOCK_METHOD(TSN, peer_initial_tsn, (), (const, override));
MOCK_METHOD(DcSctpSocketCallbacks&, callbacks, (), (const, override));
MOCK_METHOD(void, ObserveRTT, (DurationMs rtt_ms), (override));
MOCK_METHOD(DurationMs, current_rto, (), (const, override));
MOCK_METHOD(bool,
IncrementTxErrorCounter,
(absl::string_view reason),
(override));
MOCK_METHOD(void, ClearTxErrorCounter, (), (override));
MOCK_METHOD(bool, HasTooManyTxErrors, (), (const, override));
SctpPacket::Builder PacketBuilder() const override {
return SctpPacket::Builder(PeerVerificationTag(), options_);
}
MOCK_METHOD(void, Send, (SctpPacket::Builder & builder), (override));
DcSctpOptions options_;
MockDcSctpSocketCallbacks& callbacks_;
};
} // namespace dcsctp
#endif // NET_DCSCTP_SOCKET_MOCK_CONTEXT_H_