xref: /aosp_15_r20/external/webrtc/logging/rtc_event_log/rtc_event_log_unittest_helper.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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