@@ -192,7 +192,7 @@ pub enum TcActionTunnelKeyOption {
192192 KeyEncTos ( u8 ) ,
193193 /// Encapsulation TTL.
194194 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
196196 /// the outer header.
197197 KeyNoFrag ,
198198 /// Other option unknown at the time of writing.
@@ -363,8 +363,6 @@ fn parse_ipv6(data: &[u8]) -> Result<Ipv6Addr, DecodeError> {
363363
364364#[ cfg( test) ]
365365mod tests {
366- use std:: fmt:: Debug ;
367-
368366 use crate :: tc:: TcActionAttribute :: Kind ;
369367 use crate :: tc:: TcActionMessageAttribute :: Actions ;
370368 use crate :: tc:: TcTunnelKeyAction :: { Release , Set } ;
@@ -377,90 +375,6 @@ mod tests {
377375
378376 use super :: * ;
379377
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-
464378 mod list {
465379 use crate :: tc:: TcActionAttribute ;
466380 use crate :: tc:: TcActionAttribute :: { InHwCount , Options , Stats } ;
@@ -472,12 +386,33 @@ mod tests {
472386
473387 use super :: * ;
474388
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+ }
478409 }
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 {
481416 header : TcActionMessageHeader {
482417 family : AddressFamily :: Unspec ,
483418 } ,
@@ -493,15 +428,18 @@ mod tests {
493428 } ,
494429 ) ,
495430 ] ,
431+ } ;
432+ EquivalentMessage {
433+ serialized,
434+ deserialized,
496435 }
497436 }
498437
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 {
505443 header : TcActionMessageHeader {
506444 family : AddressFamily :: Unspec ,
507445 } ,
@@ -580,83 +518,42 @@ mod tests {
580518 ] ,
581519 } ] ) ,
582520 ] ,
521+ } ;
522+ EquivalentMessage {
523+ serialized,
524+ deserialized,
583525 }
584526 }
585527
586528 #[ test]
587529 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 ( ) ;
590532 }
591533
592534 #[ test]
593535 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 ( ) ;
596538 }
597539
598540 #[ test]
599541 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 ( ) ;
602544 }
603545
604546 #[ test]
605547 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 ( ) ;
620550 }
621551 }
622552
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-
653553 #[ test]
654554 fn u32_from_tunnel_key_action_is_faithful_to_spec ( ) {
655555 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 ) ) ;
660557 let arbitrary_value = 42 ;
661558 assert_eq ! (
662559 arbitrary_value,
@@ -705,7 +602,7 @@ mod tests {
705602 index : 4 ,
706603 refcnt : 5 ,
707604 } ,
708- tunnel_key_action : TcTunnelKeyAction :: Release ,
605+ tunnel_key_action : Release ,
709606 } ;
710607 let mut bytes = vec ! [ 0 ; params. buffer_len( ) ] ;
711608 params. emit ( & mut bytes) ;
0 commit comments