@@ -192,7 +192,7 @@ pub enum TcActionTunnelKeyOption {
192
192
KeyEncTos ( u8 ) ,
193
193
/// Encapsulation TTL.
194
194
KeyEncTtl ( u8 ) ,
195
- /// Flag which indicated that the "do not fragment" bit should be set in
195
+ /// Flag which indicates that the "do not fragment" bit should be set in
196
196
/// the outer header.
197
197
KeyNoFrag ,
198
198
/// Other option unknown at the time of writing.
@@ -363,8 +363,6 @@ fn parse_ipv6(data: &[u8]) -> Result<Ipv6Addr, DecodeError> {
363
363
364
364
#[ cfg( test) ]
365
365
mod tests {
366
- use std:: fmt:: Debug ;
367
-
368
366
use crate :: tc:: TcActionAttribute :: Kind ;
369
367
use crate :: tc:: TcActionMessageAttribute :: Actions ;
370
368
use crate :: tc:: TcTunnelKeyAction :: { Release , Set } ;
@@ -377,90 +375,6 @@ mod tests {
377
375
378
376
use super :: * ;
379
377
380
- trait ParseBuffer {
381
- fn parse_buffer ( buf : Vec < u8 > ) -> Self ;
382
- }
383
-
384
- trait SerializeToBuffer {
385
- fn serialize_to_buffer ( & self ) -> Vec < u8 > ;
386
- }
387
-
388
- trait AssertParsesFrom {
389
- fn assert_parses_from ( & self , serialized : Vec < u8 > ) ;
390
- }
391
-
392
- trait AssertSerializesTo {
393
- fn assert_serializes_to ( & self , serialized : Vec < u8 > ) ;
394
- }
395
-
396
- trait AssertSerThenParse {
397
- fn assert_ser_then_parse ( & self ) ;
398
- }
399
-
400
- trait AssertParseThenSer {
401
- fn assert_parse_then_ser ( serialized : Vec < u8 > ) ;
402
- }
403
-
404
- impl < Message > AssertSerThenParse for Message
405
- where
406
- Message : SerializeToBuffer + ParseBuffer + Debug + Eq ,
407
- {
408
- fn assert_ser_then_parse ( & self ) {
409
- let serialized = self . serialize_to_buffer ( ) ;
410
- let parsed = Message :: parse_buffer ( serialized) ;
411
- assert_eq ! ( parsed, * self ) ;
412
- }
413
- }
414
-
415
- impl < Message > AssertParseThenSer for Message
416
- where
417
- Message : SerializeToBuffer + ParseBuffer + Debug + Eq ,
418
- {
419
- fn assert_parse_then_ser ( serialized : Vec < u8 > ) {
420
- let parsed = Message :: parse_buffer ( serialized. clone ( ) ) ;
421
- let reserialized = parsed. serialize_to_buffer ( ) ;
422
- assert_eq ! ( reserialized, serialized) ;
423
- }
424
- }
425
-
426
- impl < Message > AssertParsesFrom for Message
427
- where
428
- Message : ParseBuffer + Debug + Eq ,
429
- {
430
- fn assert_parses_from ( & self , serialized : Vec < u8 > ) {
431
- assert_eq ! ( self , & Message :: parse_buffer( serialized) ) ;
432
- }
433
- }
434
-
435
- impl < Message > AssertSerializesTo for Message
436
- where
437
- Message : SerializeToBuffer + Debug + Eq ,
438
- {
439
- fn assert_serializes_to ( & self , serialized : Vec < u8 > ) {
440
- assert_eq ! ( self . serialize_to_buffer( ) , serialized) ;
441
- }
442
- }
443
-
444
- impl < Message > SerializeToBuffer for Message
445
- where
446
- Message : Emitable ,
447
- {
448
- fn serialize_to_buffer ( & self ) -> Vec < u8 > {
449
- let mut buffer = vec ! [ 0 ; self . buffer_len( ) ] ;
450
- self . emit ( & mut buffer) ;
451
- buffer
452
- }
453
- }
454
-
455
- impl ParseBuffer for TcActionMessage {
456
- fn parse_buffer ( buf : Vec < u8 > ) -> TcActionMessage {
457
- TcActionMessage :: parse (
458
- & TcActionMessageBuffer :: new_checked ( & buf) . unwrap ( ) ,
459
- )
460
- . unwrap ( )
461
- }
462
- }
463
-
464
378
mod list {
465
379
use crate :: tc:: TcActionAttribute ;
466
380
use crate :: tc:: TcActionAttribute :: { InHwCount , Options , Stats } ;
@@ -472,12 +386,33 @@ mod tests {
472
386
473
387
use super :: * ;
474
388
475
- const LIST_REQUEST : & str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000" ;
476
- fn reference_list_request_serialized ( ) -> Vec < u8 > {
477
- hex:: decode ( LIST_REQUEST ) . unwrap ( )
389
+ struct EquivalentMessage < T > {
390
+ pub serialized : Vec < u8 > ,
391
+ pub deserialized : T ,
392
+ }
393
+
394
+ impl EquivalentMessage < TcActionMessage > {
395
+ pub fn assert_serialized_parses_to_deserialized ( & self ) {
396
+ let parsed = TcActionMessage :: parse (
397
+ & TcActionMessageBuffer :: new_checked ( & self . serialized )
398
+ . unwrap ( ) ,
399
+ )
400
+ . unwrap ( ) ;
401
+ assert_eq ! ( parsed, self . deserialized) ;
402
+ }
403
+
404
+ pub fn assert_deserialized_serializes_to_serialized ( & self ) {
405
+ let mut buf = vec ! [ 0 ; self . serialized. len( ) ] ;
406
+ self . deserialized . emit ( & mut buf) ;
407
+ assert_eq ! ( self . serialized, buf) ;
408
+ }
478
409
}
479
- fn list_request ( ) -> TcActionMessage {
480
- TcActionMessage {
410
+
411
+ fn reference_message_list_request ( ) -> EquivalentMessage < TcActionMessage >
412
+ {
413
+ const LIST_REQUEST : & str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000" ;
414
+ let serialized = hex:: decode ( LIST_REQUEST ) . unwrap ( ) ;
415
+ let deserialized = TcActionMessage {
481
416
header : TcActionMessageHeader {
482
417
family : AddressFamily :: Unspec ,
483
418
} ,
@@ -493,15 +428,18 @@ mod tests {
493
428
} ,
494
429
) ,
495
430
] ,
431
+ } ;
432
+ EquivalentMessage {
433
+ serialized,
434
+ deserialized,
496
435
}
497
436
}
498
437
499
- const LIST_RESPONSE : & str = "000000000800030001000000dc000100d80000000f00010074756e6e656c5f6b6579000044000400140001000000000000000000000000000000000014000700000000000000000000000000000000001800030000000000000000000000000000000000000000000c000900000000000300000008000a00000000006c0002001c0002000100000000000000030000000100000000000000010000000800070000000bb808000300ac12010108000400ac1201040600090012b5000005000a000100000024000100e3a5800000000000e3a580000000000000000000000000000000000000000000" ;
500
- fn reference_list_response_serialized ( ) -> Vec < u8 > {
501
- hex:: decode ( LIST_RESPONSE ) . unwrap ( )
502
- }
503
- fn list_response ( ) -> TcActionMessage {
504
- TcActionMessage {
438
+ fn reference_message_list_response (
439
+ ) -> EquivalentMessage < TcActionMessage > {
440
+ const LIST_RESPONSE : & str = "000000000800030001000000dc000100d80000000f00010074756e6e656c5f6b6579000044000400140001000000000000000000000000000000000014000700000000000000000000000000000000001800030000000000000000000000000000000000000000000c000900000000000300000008000a00000000006c0002001c0002000100000000000000030000000100000000000000010000000800070000000bb808000300ac12010108000400ac1201040600090012b5000005000a000100000024000100e3a5800000000000e3a580000000000000000000000000000000000000000000" ;
441
+ let serialized = hex:: decode ( LIST_RESPONSE ) . unwrap ( ) ;
442
+ let deserialized = TcActionMessage {
505
443
header : TcActionMessageHeader {
506
444
family : AddressFamily :: Unspec ,
507
445
} ,
@@ -580,83 +518,42 @@ mod tests {
580
518
] ,
581
519
} ] ) ,
582
520
] ,
521
+ } ;
522
+ EquivalentMessage {
523
+ serialized,
524
+ deserialized,
583
525
}
584
526
}
585
527
586
528
#[ test]
587
529
fn parses_reference_request ( ) {
588
- list_request ( )
589
- . assert_parses_from ( reference_list_request_serialized ( ) ) ;
530
+ reference_message_list_request ( )
531
+ . assert_serialized_parses_to_deserialized ( ) ;
590
532
}
591
533
592
534
#[ test]
593
535
fn serializes_to_reference_request ( ) {
594
- list_request ( )
595
- . assert_serializes_to ( reference_list_request_serialized ( ) ) ;
536
+ reference_message_list_request ( )
537
+ . assert_deserialized_serializes_to_serialized ( ) ;
596
538
}
597
539
598
540
#[ test]
599
541
fn parses_reference_response ( ) {
600
- list_response ( )
601
- . assert_parses_from ( reference_list_response_serialized ( ) ) ;
542
+ reference_message_list_response ( )
543
+ . assert_serialized_parses_to_deserialized ( ) ;
602
544
}
603
545
604
546
#[ test]
605
547
fn serializes_to_reference_response ( ) {
606
- list_response ( )
607
- . assert_serializes_to ( reference_list_response_serialized ( ) ) ;
608
- }
609
-
610
- #[ test]
611
- fn ser_then_parse_reference_request ( ) {
612
- list_request ( ) . assert_ser_then_parse ( ) ;
613
- }
614
-
615
- #[ test]
616
- fn parse_then_ser_reference_request ( ) {
617
- TcActionMessage :: assert_parse_then_ser (
618
- reference_list_request_serialized ( ) ,
619
- ) ;
548
+ reference_message_list_response ( )
549
+ . assert_deserialized_serializes_to_serialized ( ) ;
620
550
}
621
551
}
622
552
623
- // #[test]
624
- // fn parse_reference_request() {
625
- // let serialized = list::Request.serialized();
626
- // let parsed = list::Request.parse_buffer(serialized);
627
- // assert_eq!(parsed, list::Request.deserialized());
628
- // }
629
- //
630
- // #[test]
631
- // fn serialize_reference_request() {
632
- // let deserialized = list::Request.deserialized();
633
- // let serialized = list::Request.serialized();
634
- // let mut buffer: Vec<u8> =
635
- // std::iter::repeat(0).take(serialized.len()).collect();
636
- // deserialized.emit(&mut buffer);
637
- // assert_eq!(buffer, serialized);
638
- // }
639
- //
640
- // #[test]
641
- // fn parse_reference_reply() {
642
- // use TcActionAttribute::*;
643
- // use TcActionMessageAttribute::*;
644
- // use TcActionTunnelKeyOption::*;
645
- // let data = list::Response.serialized();
646
- // let science = TcActionMessageBuffer::new_checked(&data).unwrap();
647
- // let parsed = TcActionMessage::parse_buffer(&science).unwrap();
648
- //
649
- // let expected = ;
650
- // assert_eq!(parsed, expected);
651
- // }
652
-
653
553
#[ test]
654
554
fn u32_from_tunnel_key_action_is_faithful_to_spec ( ) {
655
555
assert_eq ! ( TCA_TUNNEL_KEY_ACT_SET , u32 :: from( Set ) ) ;
656
- assert_eq ! (
657
- TCA_TUNNEL_KEY_ACT_RELEASE ,
658
- u32 :: from( TcTunnelKeyAction :: Release )
659
- ) ;
556
+ assert_eq ! ( TCA_TUNNEL_KEY_ACT_RELEASE , u32 :: from( Release ) ) ;
660
557
let arbitrary_value = 42 ;
661
558
assert_eq ! (
662
559
arbitrary_value,
@@ -705,7 +602,7 @@ mod tests {
705
602
index : 4 ,
706
603
refcnt : 5 ,
707
604
} ,
708
- tunnel_key_action : TcTunnelKeyAction :: Release ,
605
+ tunnel_key_action : Release ,
709
606
} ;
710
607
let mut bytes = vec ! [ 0 ; params. buffer_len( ) ] ;
711
608
params. emit ( & mut bytes) ;
0 commit comments