@@ -40,4 +40,100 @@ func TestPrepareFork_SnapshotRewritePersistsRestoreMetadata(t *testing.T) {
4040 require .Len (t , meta .NetworkOverrides , 1 )
4141 assert .Equal (t , "tap-new" , meta .NetworkOverrides [0 ].HostDevName )
4242 assert .Equal (t , filepath .Join (tmp , "source" ), meta .SnapshotSourceDataDir )
43+ assert .True (t , meta .RetainSnapshotSourceDataDirAlias )
44+ }
45+
46+ func TestPrepareFork_DoesNotRetainExistingSourceAlias (t * testing.T ) {
47+ starter := NewStarter ()
48+ tmp := t .TempDir ()
49+ sourceDir := filepath .Join (tmp , "source" )
50+ targetDir := filepath .Join (tmp , "target" )
51+ require .NoError (t , os .MkdirAll (sourceDir , 0755 ))
52+ require .NoError (t , os .MkdirAll (targetDir , 0755 ))
53+ require .NoError (t , saveRestoreMetadata (targetDir , nil ))
54+
55+ _ , err := starter .PrepareFork (context .Background (), hypervisor.ForkPrepareRequest {
56+ SnapshotConfigPath : filepath .Join (targetDir , "snapshots" , "snapshot-latest" , "config.json" ),
57+ SourceDataDir : sourceDir ,
58+ TargetDataDir : targetDir ,
59+ })
60+ require .NoError (t , err )
61+
62+ meta , err := loadRestoreMetadata (targetDir )
63+ require .NoError (t , err )
64+ assert .Equal (t , sourceDir , meta .SnapshotSourceDataDir )
65+ assert .False (t , meta .RetainSnapshotSourceDataDirAlias )
66+ }
67+
68+ func TestPrepareFork_ReturnsSourceStatErrors (t * testing.T ) {
69+ starter := NewStarter ()
70+ tmp := t .TempDir ()
71+ targetDir := filepath .Join (tmp , "target" )
72+ require .NoError (t , os .MkdirAll (targetDir , 0755 ))
73+ require .NoError (t , saveRestoreMetadata (targetDir , nil ))
74+
75+ _ , err := starter .PrepareFork (context .Background (), hypervisor.ForkPrepareRequest {
76+ SnapshotConfigPath : filepath .Join (targetDir , "snapshots" , "snapshot-latest" , "config.json" ),
77+ SourceDataDir : filepath .Join (tmp , "source" ) + "\x00 " ,
78+ TargetDataDir : targetDir ,
79+ })
80+ require .Error (t , err )
81+ assert .Contains (t , err .Error (), "stat snapshot source data dir" )
82+ }
83+
84+ func TestPrepareFork_PreservesRetainedUpstreamAlias (t * testing.T ) {
85+ starter := NewStarter ()
86+ tmp := t .TempDir ()
87+ upstreamDir := filepath .Join (tmp , "upstream" )
88+ sourceDir := filepath .Join (tmp , "source" )
89+ targetDir := filepath .Join (tmp , "target" )
90+ require .NoError (t , os .MkdirAll (sourceDir , 0755 ))
91+ require .NoError (t , os .MkdirAll (targetDir , 0755 ))
92+ require .NoError (t , saveRestoreMetadataState (targetDir , & restoreMetadata {
93+ SnapshotSourceDataDir : upstreamDir ,
94+ RetainSnapshotSourceDataDirAlias : true ,
95+ }))
96+
97+ _ , err := starter .PrepareFork (context .Background (), hypervisor.ForkPrepareRequest {
98+ SnapshotConfigPath : filepath .Join (targetDir , "snapshots" , "snapshot-latest" , "config.json" ),
99+ SourceDataDir : sourceDir ,
100+ TargetDataDir : targetDir ,
101+ })
102+ require .NoError (t , err )
103+
104+ meta , err := loadRestoreMetadata (targetDir )
105+ require .NoError (t , err )
106+ assert .Equal (t , upstreamDir , meta .SnapshotSourceDataDir )
107+ assert .True (t , meta .RetainSnapshotSourceDataDirAlias )
108+ }
109+
110+ func TestPrepareFork_NetworkRewritePreservesRetainedAlias (t * testing.T ) {
111+ starter := NewStarter ()
112+ tmp := t .TempDir ()
113+ upstreamDir := filepath .Join (tmp , "upstream" )
114+ targetDir := filepath .Join (tmp , "target" )
115+ require .NoError (t , os .MkdirAll (targetDir , 0755 ))
116+ require .NoError (t , saveRestoreMetadataState (targetDir , & restoreMetadata {
117+ SnapshotSourceDataDir : upstreamDir ,
118+ RetainSnapshotSourceDataDirAlias : true ,
119+ NetworkOverrides : []networkOverride {{
120+ IfaceID : "eth0" ,
121+ HostDevName : "tap-old" ,
122+ }},
123+ }))
124+
125+ _ , err := starter .PrepareFork (context .Background (), hypervisor.ForkPrepareRequest {
126+ SnapshotConfigPath : filepath .Join (targetDir , "snapshots" , "snapshot-latest" , "config.json" ),
127+ Network : & hypervisor.ForkNetworkConfig {
128+ TAPDevice : "tap-new" ,
129+ },
130+ })
131+ require .NoError (t , err )
132+
133+ meta , err := loadRestoreMetadata (targetDir )
134+ require .NoError (t , err )
135+ require .Len (t , meta .NetworkOverrides , 1 )
136+ assert .Equal (t , "tap-new" , meta .NetworkOverrides [0 ].HostDevName )
137+ assert .Equal (t , upstreamDir , meta .SnapshotSourceDataDir )
138+ assert .True (t , meta .RetainSnapshotSourceDataDirAlias )
43139}
0 commit comments