Adds support to change transport routes in Scenario tests.

This CL makes it possible to change transport routes while running
a scenario based test.

To make this possible in a consistent manner, the scenario test
framework is modified to only allow shared transport for all streams
between two CallClients. This is what typically is done in practice and
it is quite complex to even reason about the implications of using
mixed transports for a single call.

Bug: webrtc:9718
Change-Id: Ib836928feed98aa2bbbe0295e158157a6518348b
Reviewed-on: https://webrtc-review.googlesource.com/c/107200
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25287}
This commit is contained in:
Sebastian Jansson
2018-10-22 11:49:03 +02:00
committed by Commit Bot
parent 8d33c0c104
commit 800e121dca
15 changed files with 300 additions and 266 deletions

View File

@ -25,7 +25,7 @@ namespace webrtc {
namespace test {
// SendVideoStream provides an interface for changing parameters and retrieving
// states at run time.
class SendVideoStream : public NetworkReceiverInterface {
class SendVideoStream {
public:
RTC_DISALLOW_COPY_AND_ASSIGN(SendVideoStream);
~SendVideoStream();
@ -43,9 +43,6 @@ class SendVideoStream : public NetworkReceiverInterface {
SendVideoStream(CallClient* sender,
VideoStreamConfig config,
Transport* send_transport);
bool TryDeliverPacket(rtc::CopyOnWriteBuffer packet,
uint64_t receiver,
Timestamp at_time) override;
std::vector<uint32_t> ssrcs_;
std::vector<uint32_t> rtx_ssrcs_;
@ -55,10 +52,12 @@ class SendVideoStream : public NetworkReceiverInterface {
std::unique_ptr<VideoEncoderFactory> encoder_factory_;
std::unique_ptr<TestVideoCapturer> video_capturer_;
FrameGeneratorCapturer* frame_generator_ = nullptr;
int next_local_network_id_ = 0;
int next_remote_network_id_ = 0;
};
// ReceiveVideoStream represents a video receiver. It can't be used directly.
class ReceiveVideoStream : public NetworkReceiverInterface {
class ReceiveVideoStream {
public:
RTC_DISALLOW_COPY_AND_ASSIGN(ReceiveVideoStream);
~ReceiveVideoStream();
@ -71,9 +70,7 @@ class ReceiveVideoStream : public NetworkReceiverInterface {
SendVideoStream* send_stream,
size_t chosen_stream,
Transport* feedback_transport);
bool TryDeliverPacket(rtc::CopyOnWriteBuffer packet,
uint64_t receiver,
Timestamp at_time) override;
VideoReceiveStream* receive_stream_ = nullptr;
FlexfecReceiveStream* flecfec_stream_ = nullptr;
std::unique_ptr<rtc::VideoSinkInterface<webrtc::VideoFrame>> renderer_;
@ -95,18 +92,10 @@ class VideoStreamPair {
private:
friend class Scenario;
VideoStreamPair(CallClient* sender,
std::vector<NetworkNode*> send_link,
uint64_t send_receiver_id,
CallClient* receiver,
std::vector<NetworkNode*> return_link,
uint64_t return_receiver_id,
VideoStreamConfig config);
const VideoStreamConfig config_;
std::vector<NetworkNode*> send_link_;
std::vector<NetworkNode*> return_link_;
NetworkNodeTransport send_transport_;
NetworkNodeTransport return_transport_;
SendVideoStream send_stream_;
ReceiveVideoStream receive_stream_;