1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_UNITTEST_HELPER_H_ 12 #define LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_UNITTEST_HELPER_H_ 13 14 #include <stddef.h> 15 #include <stdint.h> 16 17 #include <memory> 18 19 #include "logging/rtc_event_log/events/rtc_event_alr_state.h" 20 #include "logging/rtc_event_log/events/rtc_event_audio_network_adaptation.h" 21 #include "logging/rtc_event_log/events/rtc_event_audio_playout.h" 22 #include "logging/rtc_event_log/events/rtc_event_audio_receive_stream_config.h" 23 #include "logging/rtc_event_log/events/rtc_event_audio_send_stream_config.h" 24 #include "logging/rtc_event_log/events/rtc_event_bwe_update_delay_based.h" 25 #include "logging/rtc_event_log/events/rtc_event_bwe_update_loss_based.h" 26 #include "logging/rtc_event_log/events/rtc_event_dtls_transport_state.h" 27 #include "logging/rtc_event_log/events/rtc_event_dtls_writable_state.h" 28 #include "logging/rtc_event_log/events/rtc_event_frame_decoded.h" 29 #include "logging/rtc_event_log/events/rtc_event_generic_ack_received.h" 30 #include "logging/rtc_event_log/events/rtc_event_generic_packet_received.h" 31 #include "logging/rtc_event_log/events/rtc_event_generic_packet_sent.h" 32 #include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h" 33 #include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h" 34 #include "logging/rtc_event_log/events/rtc_event_probe_cluster_created.h" 35 #include "logging/rtc_event_log/events/rtc_event_probe_result_failure.h" 36 #include "logging/rtc_event_log/events/rtc_event_probe_result_success.h" 37 #include "logging/rtc_event_log/events/rtc_event_remote_estimate.h" 38 #include "logging/rtc_event_log/events/rtc_event_route_change.h" 39 #include "logging/rtc_event_log/events/rtc_event_rtcp_packet_incoming.h" 40 #include "logging/rtc_event_log/events/rtc_event_rtcp_packet_outgoing.h" 41 #include "logging/rtc_event_log/events/rtc_event_rtp_packet_incoming.h" 42 #include "logging/rtc_event_log/events/rtc_event_rtp_packet_outgoing.h" 43 #include "logging/rtc_event_log/events/rtc_event_video_receive_stream_config.h" 44 #include "logging/rtc_event_log/events/rtc_event_video_send_stream_config.h" 45 #include "logging/rtc_event_log/rtc_event_log_parser.h" 46 #include "logging/rtc_event_log/rtc_stream_config.h" 47 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" 48 #include "modules/rtp_rtcp/source/rtcp_packet/bye.h" 49 #include "modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" 50 #include "modules/rtp_rtcp/source/rtcp_packet/fir.h" 51 #include "modules/rtp_rtcp/source/rtcp_packet/loss_notification.h" 52 #include "modules/rtp_rtcp/source/rtcp_packet/nack.h" 53 #include "modules/rtp_rtcp/source/rtcp_packet/pli.h" 54 #include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 55 #include "modules/rtp_rtcp/source/rtcp_packet/remb.h" 56 #include "modules/rtp_rtcp/source/rtcp_packet/report_block.h" 57 #include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h" 58 #include "modules/rtp_rtcp/source/rtp_packet.h" 59 #include "rtc_base/random.h" 60 61 namespace webrtc { 62 63 namespace test { 64 65 class EventGenerator { 66 public: EventGenerator(uint64_t seed)67 explicit EventGenerator(uint64_t seed) : prng_(seed) {} 68 69 std::unique_ptr<RtcEventAlrState> NewAlrState(); 70 std::unique_ptr<RtcEventAudioNetworkAdaptation> NewAudioNetworkAdaptation(); 71 std::unique_ptr<RtcEventAudioPlayout> NewAudioPlayout(uint32_t ssrc); 72 std::unique_ptr<RtcEventBweUpdateDelayBased> NewBweUpdateDelayBased(); 73 std::unique_ptr<RtcEventBweUpdateLossBased> NewBweUpdateLossBased(); 74 std::unique_ptr<RtcEventDtlsTransportState> NewDtlsTransportState(); 75 std::unique_ptr<RtcEventDtlsWritableState> NewDtlsWritableState(); 76 std::unique_ptr<RtcEventFrameDecoded> NewFrameDecodedEvent(uint32_t ssrc); 77 std::unique_ptr<RtcEventGenericAckReceived> NewGenericAckReceived(); 78 std::unique_ptr<RtcEventGenericPacketReceived> NewGenericPacketReceived(); 79 std::unique_ptr<RtcEventGenericPacketSent> NewGenericPacketSent(); 80 std::unique_ptr<RtcEventIceCandidatePair> NewIceCandidatePair(); 81 std::unique_ptr<RtcEventIceCandidatePairConfig> NewIceCandidatePairConfig(); 82 std::unique_ptr<RtcEventProbeClusterCreated> NewProbeClusterCreated(); 83 std::unique_ptr<RtcEventProbeResultFailure> NewProbeResultFailure(); 84 std::unique_ptr<RtcEventProbeResultSuccess> NewProbeResultSuccess(); 85 std::unique_ptr<RtcEventRouteChange> NewRouteChange(); 86 std::unique_ptr<RtcEventRemoteEstimate> NewRemoteEstimate(); 87 std::unique_ptr<RtcEventRtcpPacketIncoming> NewRtcpPacketIncoming(); 88 std::unique_ptr<RtcEventRtcpPacketOutgoing> NewRtcpPacketOutgoing(); 89 90 rtcp::SenderReport NewSenderReport(); 91 rtcp::ReceiverReport NewReceiverReport(); 92 rtcp::ExtendedReports NewExtendedReports(); 93 rtcp::Nack NewNack(); 94 rtcp::Remb NewRemb(); 95 rtcp::Fir NewFir(); 96 rtcp::Pli NewPli(); 97 rtcp::Bye NewBye(); 98 rtcp::TransportFeedback NewTransportFeedback(); 99 rtcp::LossNotification NewLossNotification(); 100 101 // `all_configured_exts` determines whether the RTP packet exhibits all 102 // configured extensions, or a random subset thereof. 103 void RandomizeRtpPacket(size_t payload_size, 104 size_t padding_size, 105 uint32_t ssrc, 106 const RtpHeaderExtensionMap& extension_map, 107 RtpPacket* rtp_packet, 108 bool all_configured_exts); 109 110 // `all_configured_exts` determines whether the RTP packet exhibits all 111 // configured extensions, or a random subset thereof. 112 std::unique_ptr<RtcEventRtpPacketIncoming> NewRtpPacketIncoming( 113 uint32_t ssrc, 114 const RtpHeaderExtensionMap& extension_map, 115 bool all_configured_exts = true); 116 117 // `all_configured_exts` determines whether the RTP packet exhibits all 118 // configured extensions, or a random subset thereof. 119 std::unique_ptr<RtcEventRtpPacketOutgoing> NewRtpPacketOutgoing( 120 uint32_t ssrc, 121 const RtpHeaderExtensionMap& extension_map, 122 bool all_configured_exts = true); 123 124 // `configure_all` determines whether all supported extensions are configured, 125 // or a random subset. 126 RtpHeaderExtensionMap NewRtpHeaderExtensionMap(bool configure_all = false); 127 128 std::unique_ptr<RtcEventAudioReceiveStreamConfig> NewAudioReceiveStreamConfig( 129 uint32_t ssrc, 130 const RtpHeaderExtensionMap& extensions); 131 132 std::unique_ptr<RtcEventAudioSendStreamConfig> NewAudioSendStreamConfig( 133 uint32_t ssrc, 134 const RtpHeaderExtensionMap& extensions); 135 136 std::unique_ptr<RtcEventVideoReceiveStreamConfig> NewVideoReceiveStreamConfig( 137 uint32_t ssrc, 138 const RtpHeaderExtensionMap& extensions); 139 140 std::unique_ptr<RtcEventVideoSendStreamConfig> NewVideoSendStreamConfig( 141 uint32_t ssrc, 142 const RtpHeaderExtensionMap& extensions); 143 144 private: 145 rtcp::ReportBlock NewReportBlock(); 146 int sent_packet_number_ = 0; 147 int received_packet_number_ = 0; 148 149 Random prng_; 150 }; 151 152 class EventVerifier { 153 public: EventVerifier(RtcEventLog::EncodingType encoding_type)154 explicit EventVerifier(RtcEventLog::EncodingType encoding_type) 155 : encoding_type_(encoding_type) {} 156 157 void VerifyLoggedAlrStateEvent(const RtcEventAlrState& original_event, 158 const LoggedAlrStateEvent& logged_event) const; 159 160 void VerifyLoggedAudioPlayoutEvent( 161 const RtcEventAudioPlayout& original_event, 162 const LoggedAudioPlayoutEvent& logged_event) const; 163 164 void VerifyLoggedAudioNetworkAdaptationEvent( 165 const RtcEventAudioNetworkAdaptation& original_event, 166 const LoggedAudioNetworkAdaptationEvent& logged_event) const; 167 168 void VerifyLoggedBweDelayBasedUpdate( 169 const RtcEventBweUpdateDelayBased& original_event, 170 const LoggedBweDelayBasedUpdate& logged_event) const; 171 172 void VerifyLoggedBweLossBasedUpdate( 173 const RtcEventBweUpdateLossBased& original_event, 174 const LoggedBweLossBasedUpdate& logged_event) const; 175 176 void VerifyLoggedBweProbeClusterCreatedEvent( 177 const RtcEventProbeClusterCreated& original_event, 178 const LoggedBweProbeClusterCreatedEvent& logged_event) const; 179 180 void VerifyLoggedBweProbeFailureEvent( 181 const RtcEventProbeResultFailure& original_event, 182 const LoggedBweProbeFailureEvent& logged_event) const; 183 184 void VerifyLoggedBweProbeSuccessEvent( 185 const RtcEventProbeResultSuccess& original_event, 186 const LoggedBweProbeSuccessEvent& logged_event) const; 187 188 void VerifyLoggedDtlsTransportState( 189 const RtcEventDtlsTransportState& original_event, 190 const LoggedDtlsTransportState& logged_event) const; 191 192 void VerifyLoggedDtlsWritableState( 193 const RtcEventDtlsWritableState& original_event, 194 const LoggedDtlsWritableState& logged_event) const; 195 196 void VerifyLoggedFrameDecoded(const RtcEventFrameDecoded& original_event, 197 const LoggedFrameDecoded& logged_event) const; 198 199 void VerifyLoggedIceCandidatePairConfig( 200 const RtcEventIceCandidatePairConfig& original_event, 201 const LoggedIceCandidatePairConfig& logged_event) const; 202 203 void VerifyLoggedIceCandidatePairEvent( 204 const RtcEventIceCandidatePair& original_event, 205 const LoggedIceCandidatePairEvent& logged_event) const; 206 207 void VerifyLoggedRouteChangeEvent( 208 const RtcEventRouteChange& original_event, 209 const LoggedRouteChangeEvent& logged_event) const; 210 211 void VerifyLoggedRemoteEstimateEvent( 212 const RtcEventRemoteEstimate& original_event, 213 const LoggedRemoteEstimateEvent& logged_event) const; 214 215 void VerifyLoggedRtpPacketIncoming( 216 const RtcEventRtpPacketIncoming& original_event, 217 const LoggedRtpPacketIncoming& logged_event) const; 218 219 void VerifyLoggedRtpPacketOutgoing( 220 const RtcEventRtpPacketOutgoing& original_event, 221 const LoggedRtpPacketOutgoing& logged_event) const; 222 223 void VerifyLoggedGenericPacketSent( 224 const RtcEventGenericPacketSent& original_event, 225 const LoggedGenericPacketSent& logged_event) const; 226 227 void VerifyLoggedGenericPacketReceived( 228 const RtcEventGenericPacketReceived& original_event, 229 const LoggedGenericPacketReceived& logged_event) const; 230 231 void VerifyLoggedGenericAckReceived( 232 const RtcEventGenericAckReceived& original_event, 233 const LoggedGenericAckReceived& logged_event) const; 234 235 template <typename EventType, typename ParsedType> VerifyLoggedRtpPacket(const EventType & original_event,const ParsedType & logged_event)236 void VerifyLoggedRtpPacket(const EventType& original_event, 237 const ParsedType& logged_event) { 238 static_assert(sizeof(ParsedType) == 0, 239 "You have to use one of the two defined template " 240 "specializations of VerifyLoggedRtpPacket"); 241 } 242 243 template <> VerifyLoggedRtpPacket(const RtcEventRtpPacketIncoming & original_event,const LoggedRtpPacketIncoming & logged_event)244 void VerifyLoggedRtpPacket(const RtcEventRtpPacketIncoming& original_event, 245 const LoggedRtpPacketIncoming& logged_event) { 246 VerifyLoggedRtpPacketIncoming(original_event, logged_event); 247 } 248 249 template <> VerifyLoggedRtpPacket(const RtcEventRtpPacketOutgoing & original_event,const LoggedRtpPacketOutgoing & logged_event)250 void VerifyLoggedRtpPacket(const RtcEventRtpPacketOutgoing& original_event, 251 const LoggedRtpPacketOutgoing& logged_event) { 252 VerifyLoggedRtpPacketOutgoing(original_event, logged_event); 253 } 254 255 void VerifyLoggedRtcpPacketIncoming( 256 const RtcEventRtcpPacketIncoming& original_event, 257 const LoggedRtcpPacketIncoming& logged_event) const; 258 259 void VerifyLoggedRtcpPacketOutgoing( 260 const RtcEventRtcpPacketOutgoing& original_event, 261 const LoggedRtcpPacketOutgoing& logged_event) const; 262 263 void VerifyLoggedSenderReport(int64_t log_time_ms, 264 const rtcp::SenderReport& original_sr, 265 const LoggedRtcpPacketSenderReport& logged_sr); 266 void VerifyLoggedReceiverReport( 267 int64_t log_time_ms, 268 const rtcp::ReceiverReport& original_rr, 269 const LoggedRtcpPacketReceiverReport& logged_rr); 270 void VerifyLoggedExtendedReports( 271 int64_t log_time_ms, 272 const rtcp::ExtendedReports& original_xr, 273 const LoggedRtcpPacketExtendedReports& logged_xr); 274 void VerifyLoggedFir(int64_t log_time_ms, 275 const rtcp::Fir& original_fir, 276 const LoggedRtcpPacketFir& logged_fir); 277 void VerifyLoggedPli(int64_t log_time_ms, 278 const rtcp::Pli& original_pli, 279 const LoggedRtcpPacketPli& logged_pli); 280 void VerifyLoggedBye(int64_t log_time_ms, 281 const rtcp::Bye& original_bye, 282 const LoggedRtcpPacketBye& logged_bye); 283 void VerifyLoggedNack(int64_t log_time_ms, 284 const rtcp::Nack& original_nack, 285 const LoggedRtcpPacketNack& logged_nack); 286 void VerifyLoggedTransportFeedback( 287 int64_t log_time_ms, 288 const rtcp::TransportFeedback& original_transport_feedback, 289 const LoggedRtcpPacketTransportFeedback& logged_transport_feedback); 290 void VerifyLoggedRemb(int64_t log_time_ms, 291 const rtcp::Remb& original_remb, 292 const LoggedRtcpPacketRemb& logged_remb); 293 void VerifyLoggedLossNotification( 294 int64_t log_time_ms, 295 const rtcp::LossNotification& original_loss_notification, 296 const LoggedRtcpPacketLossNotification& logged_loss_notification); 297 298 void VerifyLoggedStartEvent(int64_t start_time_us, 299 int64_t utc_start_time_us, 300 const LoggedStartEvent& logged_event) const; 301 void VerifyLoggedStopEvent(int64_t stop_time_us, 302 const LoggedStopEvent& logged_event) const; 303 304 void VerifyLoggedAudioRecvConfig( 305 const RtcEventAudioReceiveStreamConfig& original_event, 306 const LoggedAudioRecvConfig& logged_event) const; 307 308 void VerifyLoggedAudioSendConfig( 309 const RtcEventAudioSendStreamConfig& original_event, 310 const LoggedAudioSendConfig& logged_event) const; 311 312 void VerifyLoggedVideoRecvConfig( 313 const RtcEventVideoReceiveStreamConfig& original_event, 314 const LoggedVideoRecvConfig& logged_event) const; 315 316 void VerifyLoggedVideoSendConfig( 317 const RtcEventVideoSendStreamConfig& original_event, 318 const LoggedVideoSendConfig& logged_event) const; 319 320 private: 321 void VerifyReportBlock(const rtcp::ReportBlock& original_report_block, 322 const rtcp::ReportBlock& logged_report_block); 323 324 RtcEventLog::EncodingType encoding_type_; 325 }; 326 327 } // namespace test 328 } // namespace webrtc 329 330 #endif // LOGGING_RTC_EVENT_LOG_RTC_EVENT_LOG_UNITTEST_HELPER_H_ 331