#[cfg(test)]
mod tests {
use crate::buffer::bucket::Bucket;
use rtp::header::Header;
use rtp::packet::Packet;
use webrtc_util::{Marshal, Unmarshal};
fn new_packet(seq_number: u16) -> Packet {
Packet {
header: Header {
sequence_number: seq_number,
..Default::default()
},
..Default::default()
}
}
fn init() -> Vec<Packet> {
vec![
new_packet(1),
new_packet(3),
new_packet(4),
new_packet(6),
new_packet(7),
new_packet(10),
]
}
#[test]
fn test_queue() {
let packets = init();
let mut bucket = Bucket::new(25000);
let mut raw = vec![0u8; 25000];
for p in &packets {
let rv = p.marshal_to(&mut raw);
assert!(rv.is_ok(), "marshal_to is OK");
let length = rv.unwrap();
let rv_add_packet = bucket.add_packet(&raw[..length], p.header.sequence_number, true);
assert!(rv_add_packet.is_ok(), "add_packet is OK");
}
let bucket_data = bucket.get(6);
assert!(bucket_data.is_some(), "bucket has data");
let data = bucket_data.unwrap();
let p = Packet::unmarshal(&mut &data[..]);
assert!(p.is_ok(), "unmarshal is OK");
assert_eq!(p.unwrap().header.sequence_number, 6);
let packet_8 = new_packet(8);
let rv = packet_8.marshal_to(&mut raw);
assert!(rv.is_ok(), "marshal_to is OK");
let length = rv.unwrap();
let rv_add_packet =
bucket.add_packet(&raw[..length], packet_8.header.sequence_number, false);
assert!(rv_add_packet.is_ok(), "add_packet is OK");
let bucket_data_8 = bucket.get(8);
assert!(bucket_data_8.is_some(), "bucket has data");
let data_8 = bucket_data_8.unwrap();
let p8 = Packet::unmarshal(&mut &data_8[..]);
assert!(p8.is_ok(), "unmarshal is OK");
assert_eq!(p8.unwrap().header.sequence_number, 8);
let rv_2 = bucket.add_packet(&raw[..length], 8, false);
assert!(rv_2.is_err());
}
fn init2() -> Vec<Packet> {
vec![new_packet(65533), new_packet(65534), new_packet(2)]
}
#[test]
fn test_queue_edges() {
let packets = init2();
let mut bucket = Bucket::new(25000);
let mut raw = vec![0u8; 25000];
for p in &packets {
let rv = p.marshal_to(&mut raw);
assert!(rv.is_ok(), "marshal_to is OK");
let length = rv.unwrap();
let rv_add_packet = bucket.add_packet(&raw[..length], p.header.sequence_number, true);
assert!(rv_add_packet.is_ok(), "add_packet is OK");
}
let bucket_data = bucket.get(65534);
assert!(bucket_data.is_some(), "bucket has data");
let data = bucket_data.unwrap();
let p = Packet::unmarshal(&mut &data[..]);
assert!(p.is_ok(), "unmarshal is OK");
assert_eq!(p.unwrap().header.sequence_number, 65534);
let packet_65535 = new_packet(65535);
let rv = packet_65535.marshal_to(&mut raw);
assert!(rv.is_ok(), "marshal_to is OK");
let length = rv.unwrap();
let rv_add_packet = bucket.add_packet(&raw[..length], 65535, false);
assert!(rv_add_packet.is_ok(), "add_packet is OK");
let bucket_data = bucket.get(65535);
assert!(bucket_data.is_some(), "bucket has data");
let data = bucket_data.unwrap();
let p = Packet::unmarshal(&mut &data[..]);
assert!(p.is_ok(), "unmarshal is OK");
assert_eq!(p.unwrap().header.sequence_number, 65535);
}
use byteorder::{BigEndian, ByteOrder};
#[test]
fn test_bigend_bytes() {
let xs: [u8; 2] = [4, 5];
let sn = BigEndian::read_u16(&xs);
println!("value:{}", sn);
println!("value2:{}", 4 << 8 | 5);
}
}