Skip to content

Commit de3eaae

Browse files
committed
socket: add basic receive test for ethernet sockets
1 parent a8db00b commit de3eaae

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/socket/eth.rs

+33
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ mod test {
384384
use crate::phy::Medium;
385385
use crate::tests::setup;
386386
use crate::wire::ethernet::EtherType;
387+
use crate::wire::EthernetAddress;
387388

388389
fn buffer(packets: usize) -> PacketBuffer<'static> {
389390
PacketBuffer::new(vec![PacketMetadata::EMPTY; packets], vec![0; 48 * packets])
@@ -405,6 +406,8 @@ mod test {
405406
0x12, 0x34,
406407
0xaa, 0x00, 0x00, 0xff,
407408
];
409+
pub const PACKET_RECEIVER: [u8; 6] = [0xaa, 0xbb, 0xcc, 0x12, 0x34, 0x56];
410+
pub const PACKET_SENDER: [u8; 6] = [0xaa, 0xbb, 0xcc, 0x78, 0x90, 0x12];
408411
pub const PACKET_PAYLOAD: [u8; 4] = [0xaa, 0x00, 0x00, 0xff];
409412

410413
#[test]
@@ -435,4 +438,34 @@ mod test {
435438
);
436439
assert!(socket.can_send());
437440
}
441+
442+
#[test]
443+
fn test_recv() {
444+
let (mut iface, _, _) = setup(Medium::Ethernet);
445+
let cx = iface.context();
446+
let mut socket = socket(buffer(1), buffer(1));
447+
448+
assert!(!socket.can_recv());
449+
assert_eq!(socket.recv(), Err(RecvError::Exhausted));
450+
assert_eq!(socket.peek(), Err(RecvError::Exhausted));
451+
452+
let frameinfo = EthernetRepr {
453+
src_addr: EthernetAddress::from_bytes(&PACKET_SENDER),
454+
dst_addr: EthernetAddress::from_bytes(&PACKET_RECEIVER),
455+
ethertype: ETHER_TYPE.into(),
456+
};
457+
458+
assert!(socket.accepts(&frameinfo));
459+
socket.process(cx, &frameinfo, &PACKET_PAYLOAD);
460+
assert!(socket.can_recv());
461+
462+
assert!(socket.accepts(&frameinfo));
463+
socket.process(cx, &frameinfo, &PACKET_PAYLOAD);
464+
465+
assert_eq!(socket.peek(), Ok(&PACKET_BYTES[..]));
466+
assert_eq!(socket.peek(), Ok(&PACKET_BYTES[..]));
467+
assert_eq!(socket.recv(), Ok(&PACKET_BYTES[..]));
468+
assert!(!socket.can_recv());
469+
assert_eq!(socket.peek(), Err(RecvError::Exhausted));
470+
}
438471
}

0 commit comments

Comments
 (0)