@@ -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,107 +375,45 @@ 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
- use crate :: tc:: TcActionAttribute ;
466
379
use crate :: tc:: TcActionAttribute :: { InHwCount , Options , Stats } ;
467
380
use crate :: tc:: TcActionMessageAttribute :: RootCount ;
468
381
use crate :: tc:: TcActionTunnelKeyOption :: {
469
382
KeyEncDstPort , KeyEncIpv4Dst , KeyEncIpv4Src , KeyEncKeyId ,
470
383
KeyNoChecksum , Params , Tm ,
471
384
} ;
385
+ use crate :: tc:: TcStats2 :: { Basic , BasicHw , Queue } ;
386
+ use crate :: tc:: { TcActionAttribute , TcStatsBasic , TcStatsQueue } ;
472
387
473
388
use super :: * ;
474
389
475
- const LIST_REQUEST : & str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000" ;
476
- fn reference_list_request_serialized ( ) -> Vec < u8 > {
477
- hex :: decode ( LIST_REQUEST ) . unwrap ( )
390
+ struct EquivalentMessage < T > {
391
+ pub serialized : Vec < u8 > ,
392
+ pub deserialized : T ,
478
393
}
479
- fn list_request ( ) -> TcActionMessage {
480
- TcActionMessage {
394
+
395
+ impl EquivalentMessage < TcActionMessage > {
396
+ pub fn assert_serialized_parses_to_deserialized ( & self ) {
397
+ let parsed = TcActionMessage :: parse (
398
+ & TcActionMessageBuffer :: new_checked ( & self . serialized )
399
+ . unwrap ( ) ,
400
+ )
401
+ . unwrap ( ) ;
402
+ assert_eq ! ( parsed, self . deserialized) ;
403
+ }
404
+
405
+ pub fn assert_deserialized_serializes_to_serialized ( & self ) {
406
+ let mut buf = vec ! [ 0 ; self . serialized. len( ) ] ;
407
+ self . deserialized . emit ( & mut buf) ;
408
+ assert_eq ! ( self . serialized, buf) ;
409
+ }
410
+ }
411
+
412
+ fn reference_message_list_request ( ) -> EquivalentMessage < TcActionMessage >
413
+ {
414
+ const LIST_REQUEST : & str = "0000000018000100140001000f00010074756e6e656c5f6b657900000c0002000100000001000000" ;
415
+ let serialized = hex:: decode ( LIST_REQUEST ) . unwrap ( ) ;
416
+ let deserialized = TcActionMessage {
481
417
header : TcActionMessageHeader {
482
418
family : AddressFamily :: Unspec ,
483
419
} ,
@@ -493,15 +429,18 @@ mod tests {
493
429
} ,
494
430
) ,
495
431
] ,
432
+ } ;
433
+ EquivalentMessage {
434
+ serialized,
435
+ deserialized,
496
436
}
497
437
}
498
438
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 {
439
+ fn reference_message_list_response (
440
+ ) -> EquivalentMessage < TcActionMessage > {
441
+ const LIST_RESPONSE : & str = "000000000800030001000000dc000100d80000000f00010074756e6e656c5f6b6579000044000400140001000000000000000000000000000000000014000700000000000000000000000000000000001800030000000000000000000000000000000000000000000c000900000000000300000008000a00000000006c0002001c0002000100000000000000030000000100000000000000010000000800070000000bb808000300ac12010108000400ac1201040600090012b5000005000a000100000024000100e3a5800000000000e3a580000000000000000000000000000000000000000000" ;
442
+ let serialized = hex:: decode ( LIST_RESPONSE ) . unwrap ( ) ;
443
+ let deserialized = TcActionMessage {
505
444
header : TcActionMessageHeader {
506
445
family : AddressFamily :: Unspec ,
507
446
} ,
@@ -512,27 +451,21 @@ mod tests {
512
451
attributes: vec![
513
452
Kind ( "tunnel_key" . to_string( ) ) ,
514
453
Stats ( vec![
515
- crate :: tc:: TcStats2 :: Basic (
516
- crate :: tc:: TcStatsBasic {
517
- bytes: 0 ,
518
- packets: 0 ,
519
- } ,
520
- ) ,
521
- crate :: tc:: TcStats2 :: BasicHw (
522
- crate :: tc:: TcStatsBasic {
523
- bytes: 0 ,
524
- packets: 0 ,
525
- } ,
526
- ) ,
527
- crate :: tc:: TcStats2 :: Queue (
528
- crate :: tc:: TcStatsQueue {
529
- qlen: 0 ,
530
- backlog: 0 ,
531
- drops: 0 ,
532
- requeues: 0 ,
533
- overlimits: 0 ,
534
- } ,
535
- ) ,
454
+ Basic ( TcStatsBasic {
455
+ bytes: 0 ,
456
+ packets: 0 ,
457
+ } ) ,
458
+ BasicHw ( TcStatsBasic {
459
+ bytes: 0 ,
460
+ packets: 0 ,
461
+ } ) ,
462
+ Queue ( TcStatsQueue {
463
+ qlen: 0 ,
464
+ backlog: 0 ,
465
+ drops: 0 ,
466
+ requeues: 0 ,
467
+ overlimits: 0 ,
468
+ } ) ,
536
469
] ) ,
537
470
// TODO: properly parse whatever this is
538
471
TcActionAttribute :: Other ( DefaultNla :: new(
@@ -580,83 +513,42 @@ mod tests {
580
513
] ,
581
514
} ] ) ,
582
515
] ,
516
+ } ;
517
+ EquivalentMessage {
518
+ serialized,
519
+ deserialized,
583
520
}
584
521
}
585
522
586
523
#[ test]
587
524
fn parses_reference_request ( ) {
588
- list_request ( )
589
- . assert_parses_from ( reference_list_request_serialized ( ) ) ;
525
+ reference_message_list_request ( )
526
+ . assert_serialized_parses_to_deserialized ( ) ;
590
527
}
591
528
592
529
#[ test]
593
530
fn serializes_to_reference_request ( ) {
594
- list_request ( )
595
- . assert_serializes_to ( reference_list_request_serialized ( ) ) ;
531
+ reference_message_list_request ( )
532
+ . assert_deserialized_serializes_to_serialized ( ) ;
596
533
}
597
534
598
535
#[ test]
599
536
fn parses_reference_response ( ) {
600
- list_response ( )
601
- . assert_parses_from ( reference_list_response_serialized ( ) ) ;
537
+ reference_message_list_response ( )
538
+ . assert_serialized_parses_to_deserialized ( ) ;
602
539
}
603
540
604
541
#[ test]
605
542
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
- ) ;
543
+ reference_message_list_response ( )
544
+ . assert_deserialized_serializes_to_serialized ( ) ;
620
545
}
621
546
}
622
547
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
548
#[ test]
654
549
fn u32_from_tunnel_key_action_is_faithful_to_spec ( ) {
655
550
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
- ) ;
551
+ assert_eq ! ( TCA_TUNNEL_KEY_ACT_RELEASE , u32 :: from( Release ) ) ;
660
552
let arbitrary_value = 42 ;
661
553
assert_eq ! (
662
554
arbitrary_value,
@@ -705,7 +597,7 @@ mod tests {
705
597
index : 4 ,
706
598
refcnt : 5 ,
707
599
} ,
708
- tunnel_key_action : TcTunnelKeyAction :: Release ,
600
+ tunnel_key_action : Release ,
709
601
} ;
710
602
let mut bytes = vec ! [ 0 ; params. buffer_len( ) ] ;
711
603
params. emit ( & mut bytes) ;
0 commit comments