@@ -384,6 +384,7 @@ mod test {
384
384
use crate :: phy:: Medium ;
385
385
use crate :: tests:: setup;
386
386
use crate :: wire:: ethernet:: EtherType ;
387
+ use crate :: wire:: EthernetAddress ;
387
388
388
389
fn buffer ( packets : usize ) -> PacketBuffer < ' static > {
389
390
PacketBuffer :: new ( vec ! [ PacketMetadata :: EMPTY ; packets] , vec ! [ 0 ; 48 * packets] )
@@ -405,6 +406,8 @@ mod test {
405
406
0x12 , 0x34 ,
406
407
0xaa , 0x00 , 0x00 , 0xff ,
407
408
] ;
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 ] ;
408
411
pub const PACKET_PAYLOAD : [ u8 ; 4 ] = [ 0xaa , 0x00 , 0x00 , 0xff ] ;
409
412
410
413
#[ test]
@@ -435,4 +438,34 @@ mod test {
435
438
) ;
436
439
assert ! ( socket. can_send( ) ) ;
437
440
}
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
+ }
438
471
}
0 commit comments