1 use super::*;
2 use crate::codecs::*;
3 
4 use chrono::prelude::*;
5 use std::io::BufReader;
6 use std::time::Duration;
7 
8 use util::Error;
9 
10 #[test]
11 fn test_packetizer() -> Result<(), Error> {
12     let multiplepayload = vec![0; 128];
13     let mut reader = BufReader::new(multiplepayload.as_slice());
14 
15     //use the G722 payloader here, because it's very simple and all 0s is valid G722 data.
16     let mut packetizer = PacketizerImpl::new(100, 98, 0x1234ABCD, 90000);
17 
18     let mut g722 = g722::G722Payloader;
19     let mut seq = new_random_sequencer();
20     let packets = packetizer.packetize(&mut reader, &mut g722, &mut seq, 2000)?;
21 
22     if packets.len() != 2 {
23         let mut packet_lengths = String::new();
24         for i in 0..packets.len() {
25             packet_lengths +=
26                 format!("Packet {} length {}\n", i, packets[i].payload.len()).as_str();
27         }
28         assert!(
29             false,
30             "Generated {} packets instead of 2\n{}",
31             packets.len(),
32             packet_lengths,
33         );
34     }
35     Ok(())
36 }
37 
38 fn fixed_time_gen() -> Duration {
39     let loc = FixedOffset::west(5 * 60 * 60); // UTC-5
40     let t = loc.ymd(1985, 6, 23).and_hms_nano(4, 0, 0, 0);
41     Duration::from_nanos(t.timestamp_nanos() as u64)
42 }
43 
44 #[test]
45 fn test_packetizer_abs_send_time() -> Result<(), Error> {
46     //use the G722 payloader here, because it's very simple and all 0s is valid G722 data.
47     let mut pktizer = PacketizerImpl::new(100, 98, 0x1234ABCD, 90000);
48     pktizer.timestamp = 45678;
49     pktizer.time_gen = Some(fixed_time_gen);
50     pktizer.enable_abs_send_time(1);
51 
52     let payload = vec![0x11, 0x12, 0x13, 0x14];
53     let mut reader = BufReader::new(payload.as_slice());
54 
55     let mut g722 = g722::G722Payloader;
56     let mut seq = new_fixed_sequencer(1234);
57     let packets = pktizer.packetize(&mut reader, &mut g722, &mut seq, 2000)?;
58 
59     let expected = Packet {
60         header: Header {
61             version: 2,
62             padding: false,
63             extension: true,
64             marker: true,
65             payload_offset: 0, // not set by Packetize() at now
66             payload_type: 98,
67             sequence_number: 1234,
68             timestamp: 45678,
69             ssrc: 0x1234ABCD,
70             csrc: vec![],
71             extension_profile: 0xBEDE,
72             extensions: vec![Extension {
73                 id: 1,
74                 payload: vec![0x40, 0, 0],
75             }],
76         },
77         payload: vec![0x11, 0x12, 0x13, 0x14],
78     };
79 
80     if packets.len() != 1 {
81         assert!(false, "Generated {} packets instead of 1", packets.len())
82     }
83 
84     assert_eq!(expected, packets[0]);
85 
86     Ok(())
87 }
88