@@ -418,30 +418,8 @@ impl<T: Versionize, U: Versionize> Versionize for (T, U) {
418418
419419#[ cfg( test) ]
420420mod tests {
421- #![ allow( non_upper_case_globals) ]
422- #![ allow( non_camel_case_types) ]
423- #![ allow( non_snake_case) ]
424421 use super :: * ;
425422 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 ) ;
445423
446424 // Generate primitive tests using this macro.
447425 macro_rules! primitive_int_test {
@@ -492,53 +470,6 @@ mod tests {
492470 assert_eq ! ( store, restore) ;
493471 }
494472
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-
542473 #[ derive( Debug , serde_derive:: Deserialize , PartialEq , serde_derive:: Serialize , Versionize ) ]
543474 enum CompatibleEnum {
544475 A ,
@@ -642,60 +573,6 @@ mod tests {
642573 assert_eq ! ( test_struct, restored_state) ;
643574 }
644575
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-
699576 #[ test]
700577 fn test_ser_de_bool ( ) {
701578 let vm = VersionMap :: new ( ) ;
@@ -824,178 +701,6 @@ mod tests {
824701 assert_eq ! ( store, restore) ;
825702 }
826703
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-
999704 #[ test]
1000705 fn test_vec_limit ( ) {
1001706 // We need extra 8 bytes for vector len.
0 commit comments