1 use super::*;
2 use crate::codecs::*;
3 use crate::error::Result;
4
5 use chrono::prelude::*;
6 use std::time::{Duration, UNIX_EPOCH};
7
8 #[test]
test_packetizer() -> Result<()>9 fn test_packetizer() -> Result<()> {
10 let multiple_payload = Bytes::from_static(&[0; 128]);
11 let g722 = Box::new(g7xx::G722Payloader {});
12 let seq = Box::new(new_random_sequencer());
13
14 //use the G722 payloader here, because it's very simple and all 0s is valid G722 data.
15 let mut packetizer = new_packetizer(100, 98, 0x1234ABCD, g722, seq, 90000);
16 let packets = packetizer.packetize(&multiple_payload, 2000)?;
17
18 if packets.len() != 2 {
19 let mut packet_lengths = String::new();
20 #[allow(clippy::needless_range_loop)]
21 for i in 0..packets.len() {
22 packet_lengths +=
23 format!("Packet {} length {}\n", i, packets[i].payload.len()).as_str();
24 }
25 panic!(
26 "Generated {} packets instead of 2\n{}",
27 packets.len(),
28 packet_lengths,
29 );
30 }
31 Ok(())
32 }
33
34 #[test]
test_packetizer_abs_send_time() -> Result<()>35 fn test_packetizer_abs_send_time() -> Result<()> {
36 let g722 = Box::new(g7xx::G722Payloader {});
37 let sequencer = Box::new(new_fixed_sequencer(1234));
38
39 let time_gen: Option<FnTimeGen> = Some(Arc::new(|| -> SystemTime {
40 let loc = FixedOffset::west_opt(5 * 60 * 60).unwrap(); // UTC-5
41 let t = loc.with_ymd_and_hms(1985, 6, 23, 4, 0, 0).unwrap();
42 UNIX_EPOCH
43 .checked_add(Duration::from_nanos(t.timestamp_nanos() as u64))
44 .unwrap_or(UNIX_EPOCH)
45 }));
46
47 //use the G722 payloader here, because it's very simple and all 0s is valid G722 data.
48 let mut pktizer = PacketizerImpl {
49 mtu: 100,
50 payload_type: 98,
51 ssrc: 0x1234ABCD,
52 payloader: g722,
53 sequencer,
54 timestamp: 45678,
55 clock_rate: 90000,
56 abs_send_time: 0,
57 time_gen,
58 };
59 pktizer.enable_abs_send_time(1);
60
61 let payload = Bytes::from_static(&[0x11, 0x12, 0x13, 0x14]);
62 let packets = pktizer.packetize(&payload, 2000)?;
63
64 let expected = Packet {
65 header: Header {
66 version: 2,
67 padding: false,
68 extension: true,
69 marker: true,
70 payload_type: 98,
71 sequence_number: 1234,
72 timestamp: 45678,
73 ssrc: 0x1234ABCD,
74 csrc: vec![],
75 extension_profile: 0xBEDE,
76 extensions: vec![Extension {
77 id: 1,
78 payload: Bytes::from_static(&[0x40, 0, 0]),
79 }],
80 },
81 payload: Bytes::from_static(&[0x11, 0x12, 0x13, 0x14]),
82 };
83
84 if packets.len() != 1 {
85 panic!("Generated {} packets instead of 1", packets.len())
86 }
87
88 assert_eq!(packets[0], expected);
89
90 Ok(())
91 }
92
93 #[test]
test_packetizer_timestamp_rollover_does_not_panic() -> Result<()>94 fn test_packetizer_timestamp_rollover_does_not_panic() -> Result<()> {
95 let g722 = Box::new(g7xx::G722Payloader {});
96 let seq = Box::new(new_random_sequencer());
97
98 let payload = Bytes::from_static(&[0; 128]);
99 let mut packetizer = new_packetizer(100, 98, 0x1234ABCD, g722, seq, 90000);
100
101 packetizer.packetize(&payload, 10)?;
102
103 packetizer.packetize(&payload, u32::MAX)?;
104
105 packetizer.skip_samples(u32::MAX);
106
107 Ok(())
108 }
109