123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #ifndef TEST_SCENARIO_SCENARIO_H_
- #define TEST_SCENARIO_SCENARIO_H_
- #include <memory>
- #include <string>
- #include <utility>
- #include <vector>
- #include "api/test/time_controller.h"
- #include "rtc_base/constructor_magic.h"
- #include "rtc_base/fake_clock.h"
- #include "rtc_base/task_queue.h"
- #include "rtc_base/task_utils/repeating_task.h"
- #include "test/gtest.h"
- #include "test/logging/log_writer.h"
- #include "test/network/network_emulation_manager.h"
- #include "test/scenario/audio_stream.h"
- #include "test/scenario/call_client.h"
- #include "test/scenario/column_printer.h"
- #include "test/scenario/network_node.h"
- #include "test/scenario/scenario_config.h"
- #include "test/scenario/video_stream.h"
- namespace webrtc {
- namespace test {
- class Scenario {
- public:
- Scenario();
- explicit Scenario(const testing::TestInfo* test_info);
- explicit Scenario(std::string file_name);
- Scenario(std::string file_name, bool real_time);
- Scenario(std::unique_ptr<LogWriterFactoryInterface> log_writer_manager,
- bool real_time);
- RTC_DISALLOW_COPY_AND_ASSIGN(Scenario);
- ~Scenario();
- NetworkEmulationManagerImpl* net() { return &network_manager_; }
- EmulatedNetworkNode* CreateSimulationNode(NetworkSimulationConfig config);
- EmulatedNetworkNode* CreateSimulationNode(
- std::function<void(NetworkSimulationConfig*)> config_modifier);
- SimulationNode* CreateMutableSimulationNode(NetworkSimulationConfig config);
- SimulationNode* CreateMutableSimulationNode(
- std::function<void(NetworkSimulationConfig*)> config_modifier);
- CallClient* CreateClient(std::string name, CallClientConfig config);
- CallClient* CreateClient(
- std::string name,
- std::function<void(CallClientConfig*)> config_modifier);
- CallClientPair* CreateRoutes(CallClient* first,
- std::vector<EmulatedNetworkNode*> send_link,
- CallClient* second,
- std::vector<EmulatedNetworkNode*> return_link);
- CallClientPair* CreateRoutes(CallClient* first,
- std::vector<EmulatedNetworkNode*> send_link,
- DataSize first_overhead,
- CallClient* second,
- std::vector<EmulatedNetworkNode*> return_link,
- DataSize second_overhead);
- void ChangeRoute(std::pair<CallClient*, CallClient*> clients,
- std::vector<EmulatedNetworkNode*> over_nodes);
- void ChangeRoute(std::pair<CallClient*, CallClient*> clients,
- std::vector<EmulatedNetworkNode*> over_nodes,
- DataSize overhead);
- VideoStreamPair* CreateVideoStream(
- std::pair<CallClient*, CallClient*> clients,
- std::function<void(VideoStreamConfig*)> config_modifier);
- VideoStreamPair* CreateVideoStream(
- std::pair<CallClient*, CallClient*> clients,
- VideoStreamConfig config);
- AudioStreamPair* CreateAudioStream(
- std::pair<CallClient*, CallClient*> clients,
- std::function<void(AudioStreamConfig*)> config_modifier);
- AudioStreamPair* CreateAudioStream(
- std::pair<CallClient*, CallClient*> clients,
- AudioStreamConfig config);
-
-
- void Every(TimeDelta interval, std::function<void(TimeDelta)> function);
- void Every(TimeDelta interval, std::function<void()> function);
-
-
- void Post(std::function<void()> function);
-
-
-
- void At(TimeDelta offset, std::function<void()> function);
-
- void NetworkDelayedAction(std::vector<EmulatedNetworkNode*> over_nodes,
- size_t packet_size,
- std::function<void()> action);
-
- void RunFor(TimeDelta duration);
-
- void RunUntil(TimeDelta target_time_since_start);
-
-
-
- void RunUntil(TimeDelta target_time_since_start,
- TimeDelta check_interval,
- std::function<bool()> exit_function);
- void Start();
- void Stop();
-
- void TriggerPacketBurst(std::vector<EmulatedNetworkNode*> over_nodes,
- size_t num_packets,
- size_t packet_size);
- ColumnPrinter TimePrinter();
- StatesPrinter* CreatePrinter(std::string name,
- TimeDelta interval,
- std::vector<ColumnPrinter> printers);
-
- Timestamp Now();
-
- TimeDelta TimeSinceStart();
- std::unique_ptr<RtcEventLogOutput> GetLogWriter(std::string name) {
- if (!log_writer_factory_ || name.empty())
- return nullptr;
- return log_writer_factory_->Create(name);
- }
- std::unique_ptr<LogWriterFactoryInterface> GetLogWriterFactory(
- std::string name) {
- if (!log_writer_factory_ || name.empty())
- return nullptr;
- return std::make_unique<LogWriterFactoryAddPrefix>(
- log_writer_factory_.get(), name);
- }
- private:
- TimeDelta TimeUntilTarget(TimeDelta target_time_offset);
- const std::unique_ptr<LogWriterFactoryInterface> log_writer_factory_;
- NetworkEmulationManagerImpl network_manager_;
- Clock* clock_;
- std::vector<std::unique_ptr<CallClient>> clients_;
- std::vector<std::unique_ptr<CallClientPair>> client_pairs_;
- std::vector<std::unique_ptr<VideoStreamPair>> video_streams_;
- std::vector<std::unique_ptr<AudioStreamPair>> audio_streams_;
- std::vector<std::unique_ptr<SimulationNode>> simulation_nodes_;
- std::vector<std::unique_ptr<StatesPrinter>> printers_;
- rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory_;
- rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory_;
- Timestamp start_time_ = Timestamp::PlusInfinity();
-
- rtc::TaskQueue task_queue_;
- };
- }
- }
- #endif
|