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