@@ -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