@@ -418,30 +418,8 @@ impl<T: Versionize, U: Versionize> Versionize for (T, U) {
418
418
419
419
#[ cfg( test) ]
420
420
mod tests {
421
- #![ allow( non_upper_case_globals) ]
422
- #![ allow( non_camel_case_types) ]
423
- #![ allow( non_snake_case) ]
424
421
use super :: * ;
425
422
use super :: { VersionMap , Versionize , VersionizeResult } ;
426
- use vmm_sys_util:: generate_fam_struct_impl;
427
-
428
- #[ repr( C ) ]
429
- #[ derive( Default , Debug , Versionize ) ]
430
- struct Message {
431
- pub len : u32 ,
432
- pub padding : u32 ,
433
- pub value : u32 ,
434
- #[ version( start = 2 , default_fn = "default_extra_value" ) ]
435
- pub extra_value : u16 ,
436
- pub entries : __IncompleteArrayField < u32 > ,
437
- }
438
-
439
- impl Message {
440
- fn default_extra_value ( _source_version : u16 ) -> u16 {
441
- 321
442
- }
443
- }
444
- generate_fam_struct_impl ! ( Message , u32 , entries, u32 , len, 100 ) ;
445
423
446
424
// Generate primitive tests using this macro.
447
425
macro_rules! primitive_int_test {
@@ -492,53 +470,6 @@ mod tests {
492
470
assert_eq ! ( store, restore) ;
493
471
}
494
472
495
- #[ repr( u32 ) ]
496
- #[ derive( Debug , Versionize , PartialEq , Clone ) ]
497
- pub enum TestState {
498
- Zero ,
499
- One ( u32 , String ) ,
500
- #[ version( start = 2 , default_fn = "test_state_default_one" ) ]
501
- Two ( u32 ) ,
502
- #[ version( start = 3 , default_fn = "test_state_default_two" ) ]
503
- Three ( u32 ) ,
504
- }
505
-
506
- impl Default for TestState {
507
- fn default ( ) -> Self {
508
- Self :: One ( 1 , "Default" . to_owned ( ) )
509
- }
510
- }
511
-
512
- impl TestState {
513
- fn test_state_default_one (
514
- & self ,
515
- target_version : u16 ,
516
- ) -> Result < TestState , VersionizeError > {
517
- match target_version {
518
- 2 => Ok ( TestState :: Two ( 2 ) ) ,
519
- 1 => Ok ( TestState :: Zero ) ,
520
- i => Err ( VersionizeError :: Serialize ( format ! (
521
- "Unknown target version: {}" ,
522
- i
523
- ) ) ) ,
524
- }
525
- }
526
-
527
- fn test_state_default_two (
528
- & self ,
529
- target_version : u16 ,
530
- ) -> Result < TestState , VersionizeError > {
531
- match target_version {
532
- 2 => Ok ( TestState :: Two ( 2 ) ) ,
533
- 1 => Ok ( TestState :: One ( 1 , "Test" . to_owned ( ) ) ) ,
534
- i => Err ( VersionizeError :: Serialize ( format ! (
535
- "Unknown target version: {}" ,
536
- i
537
- ) ) ) ,
538
- }
539
- }
540
- }
541
-
542
473
#[ derive( Debug , serde_derive:: Deserialize , PartialEq , serde_derive:: Serialize , Versionize ) ]
543
474
enum CompatibleEnum {
544
475
A ,
@@ -642,60 +573,6 @@ mod tests {
642
573
assert_eq ! ( test_struct, restored_state) ;
643
574
}
644
575
645
- #[ test]
646
- fn test_enum_basic ( ) {
647
- let mut snapshot_mem = vec ! [ 0u8 ; 64 ] ;
648
- let mut vm = VersionMap :: new ( ) ;
649
- vm. new_version ( )
650
- . set_type_version ( TestState :: type_id ( ) , 2 )
651
- . new_version ( )
652
- . set_type_version ( TestState :: type_id ( ) , 3 ) ;
653
-
654
- // Test trivial case.
655
- let state = TestState :: One ( 1337 , "a string" . to_owned ( ) ) ;
656
- state
657
- . serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
658
- . unwrap ( ) ;
659
- let restored_state =
660
- <TestState as Versionize >:: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 1 ) . unwrap ( ) ;
661
- assert_eq ! ( state, restored_state) ;
662
- }
663
-
664
- #[ test]
665
- fn test_enum_rollback ( ) {
666
- let mut snapshot_mem = vec ! [ 0u8 ; 64 ] ;
667
- let mut vm = VersionMap :: new ( ) ;
668
- vm. new_version ( )
669
- . set_type_version ( TestState :: type_id ( ) , 2 )
670
- . new_version ( )
671
- . set_type_version ( TestState :: type_id ( ) , 3 ) ;
672
-
673
- // Test `default_fn` for serialization of enum variants that don't exist in previous versions.
674
- let state = TestState :: Three ( 1337 ) ;
675
- state
676
- . serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 2 )
677
- . unwrap ( ) ;
678
- let restored_state =
679
- <TestState as Versionize >:: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 2 ) . unwrap ( ) ;
680
- assert_eq ! ( restored_state, TestState :: Two ( 2 ) ) ;
681
-
682
- let state = TestState :: Three ( 1337 ) ;
683
- state
684
- . serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
685
- . unwrap ( ) ;
686
- let restored_state =
687
- <TestState as Versionize >:: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 1 ) . unwrap ( ) ;
688
- assert_eq ! ( restored_state, TestState :: One ( 1 , "Test" . to_owned( ) ) ) ;
689
-
690
- let state = TestState :: Two ( 1234 ) ;
691
- state
692
- . serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
693
- . unwrap ( ) ;
694
- let restored_state =
695
- <TestState as Versionize >:: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 1 ) . unwrap ( ) ;
696
- assert_eq ! ( restored_state, TestState :: Zero ) ;
697
- }
698
-
699
576
#[ test]
700
577
fn test_ser_de_bool ( ) {
701
578
let vm = VersionMap :: new ( ) ;
@@ -824,178 +701,6 @@ mod tests {
824
701
assert_eq ! ( store, restore) ;
825
702
}
826
703
827
- #[ test]
828
- fn test_ser_de_vec_version ( ) {
829
- type MessageFamStructWrapper = FamStructWrapper < Message > ;
830
- let vm = VersionMap :: new ( ) ;
831
- let mut f = MessageFamStructWrapper :: new ( 0 ) ;
832
- f. as_mut_fam_struct ( ) . padding = 123 ;
833
- f. as_mut_fam_struct ( ) . extra_value = 321 ;
834
-
835
- f. push ( 10 ) . unwrap ( ) ;
836
- f. push ( 20 ) . unwrap ( ) ;
837
-
838
- let mut snapshot_mem = vec ! [ 0u8 ; 512 ] ;
839
- let mut store = Vec :: new ( ) ;
840
- store. push ( f. clone ( ) ) ;
841
- store. push ( f. clone ( ) ) ;
842
-
843
- store
844
- . serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
845
- . unwrap ( ) ;
846
- let restore = <Vec < MessageFamStructWrapper > as Versionize >:: deserialize (
847
- & mut snapshot_mem. as_slice ( ) ,
848
- & vm,
849
- 1 ,
850
- )
851
- . unwrap ( ) ;
852
- let eq = store == restore;
853
- // This is important to test separately as we rely on the default_fn to
854
- // override the u16 default value.
855
- assert_eq ! ( 321 , restore[ 0 ] . as_fam_struct_ref( ) . extra_value) ;
856
- assert ! ( eq) ;
857
- }
858
-
859
- #[ repr( C ) ]
860
- #[ derive( Default ) ]
861
- pub struct __IncompleteArrayField < T > ( :: std:: marker:: PhantomData < T > , [ T ; 0 ] ) ;
862
- impl < T > __IncompleteArrayField < T > {
863
- #[ inline]
864
- pub fn new ( ) -> Self {
865
- __IncompleteArrayField ( :: std:: marker:: PhantomData , [ ] )
866
- }
867
- #[ inline]
868
- pub unsafe fn as_ptr ( & self ) -> * const T {
869
- self as * const __IncompleteArrayField < T > as * const T
870
- }
871
- #[ inline]
872
- pub unsafe fn as_mut_ptr ( & mut self ) -> * mut T {
873
- self as * mut __IncompleteArrayField < T > as * mut T
874
- }
875
- #[ inline]
876
- pub unsafe fn as_slice ( & self , len : usize ) -> & [ T ] {
877
- :: std:: slice:: from_raw_parts ( self . as_ptr ( ) , len)
878
- }
879
- #[ inline]
880
- pub unsafe fn as_mut_slice ( & mut self , len : usize ) -> & mut [ T ] {
881
- :: std:: slice:: from_raw_parts_mut ( self . as_mut_ptr ( ) , len)
882
- }
883
- }
884
-
885
- impl < T > :: std:: fmt:: Debug for __IncompleteArrayField < T > {
886
- fn fmt ( & self , fmt : & mut :: std:: fmt:: Formatter < ' _ > ) -> :: std:: fmt:: Result {
887
- fmt. write_str ( "__IncompleteArrayField" )
888
- }
889
- }
890
- impl < T > :: std:: clone:: Clone for __IncompleteArrayField < T > {
891
- #[ inline]
892
- fn clone ( & self ) -> Self {
893
- Self :: new ( )
894
- }
895
- }
896
-
897
- impl < T > Versionize for __IncompleteArrayField < T > {
898
- #[ inline]
899
- fn serialize < W : std:: io:: Write > (
900
- & self ,
901
- _writer : & mut W ,
902
- _version_map : & VersionMap ,
903
- _app_version : u16 ,
904
- ) -> Result < ( ) , VersionizeError > {
905
- Ok ( ( ) )
906
- }
907
-
908
- #[ inline]
909
- fn deserialize < R : std:: io:: Read > (
910
- _reader : & mut R ,
911
- _version_map : & VersionMap ,
912
- _app_version : u16 ,
913
- ) -> Result < Self , VersionizeError > {
914
- Ok ( Self :: new ( ) )
915
- }
916
-
917
- // Not used.
918
- fn version ( ) -> u16 {
919
- 1
920
- }
921
- }
922
-
923
- #[ test]
924
- fn test_famstruct ( ) {
925
- type MessageFamStructWrapper = FamStructWrapper < Message > ;
926
-
927
- let vm = VersionMap :: new ( ) ;
928
- let mut f = MessageFamStructWrapper :: new ( 0 ) ;
929
- f. as_mut_fam_struct ( ) . padding = 123 ;
930
- f. as_mut_fam_struct ( ) . extra_value = 321 ;
931
-
932
- f. push ( 10 ) . unwrap ( ) ;
933
- f. push ( 20 ) . unwrap ( ) ;
934
-
935
- let mut snapshot_mem = vec ! [ 0u8 ; 64 ] ;
936
- f. serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
937
- . unwrap ( ) ;
938
- let restored_state =
939
- MessageFamStructWrapper :: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 1 ) . unwrap ( ) ;
940
-
941
- let original_values = f. as_slice ( ) ;
942
- let restored_values = restored_state. as_slice ( ) ;
943
-
944
- assert_eq ! (
945
- f. as_fam_struct_ref( ) . padding,
946
- restored_state. as_fam_struct_ref( ) . padding
947
- ) ;
948
- assert_eq ! ( original_values, restored_values) ;
949
- assert_eq ! (
950
- f. as_fam_struct_ref( ) . extra_value,
951
- restored_state. as_fam_struct_ref( ) . extra_value
952
- ) ;
953
- }
954
-
955
- #[ test]
956
- fn test_famstruct_ser_error ( ) {
957
- type MessageFamStructWrapper = FamStructWrapper < Message > ;
958
-
959
- let vm = VersionMap :: new ( ) ;
960
- let mut f = MessageFamStructWrapper :: new ( 0 ) ;
961
- f. as_mut_fam_struct ( ) . padding = 123 ;
962
- f. as_mut_fam_struct ( ) . extra_value = 321 ;
963
-
964
- f. push ( 10 ) . unwrap ( ) ;
965
- f. push ( 20 ) . unwrap ( ) ;
966
-
967
- let mut snapshot_mem = vec ! [ 0u8 ; 16 ] ;
968
-
969
- assert ! ( f
970
- . serialize( & mut snapshot_mem. as_mut_slice( ) , & vm, 1 )
971
- . is_err( ) ) ;
972
- }
973
- #[ test]
974
- fn test_famstruct_version ( ) {
975
- type MessageFamStructWrapper = FamStructWrapper < Message > ;
976
-
977
- let vm = VersionMap :: new ( ) ;
978
- let mut f = MessageFamStructWrapper :: new ( 0 ) ;
979
- f. as_mut_fam_struct ( ) . padding = 123 ;
980
- f. push ( 10 ) . unwrap ( ) ;
981
- f. push ( 20 ) . unwrap ( ) ;
982
-
983
- let mut snapshot_mem = vec ! [ 0u8 ; 64 ] ;
984
- f. serialize ( & mut snapshot_mem. as_mut_slice ( ) , & vm, 1 )
985
- . unwrap ( ) ;
986
- let restored_state =
987
- MessageFamStructWrapper :: deserialize ( & mut snapshot_mem. as_slice ( ) , & vm, 1 ) . unwrap ( ) ;
988
-
989
- let original_values = f. as_slice ( ) ;
990
- let restored_values = restored_state. as_slice ( ) ;
991
-
992
- assert_eq ! (
993
- f. as_fam_struct_ref( ) . padding,
994
- restored_state. as_fam_struct_ref( ) . padding
995
- ) ;
996
- assert_eq ! ( original_values, restored_values) ;
997
- }
998
-
999
704
#[ test]
1000
705
fn test_vec_limit ( ) {
1001
706
// We need extra 8 bytes for vector len.
0 commit comments