@@ -84,6 +84,74 @@ func TestStandbySnapshotRejectsTargetHypervisorOverride(t *testing.T) {
8484 assert .ErrorIs (t , err , ErrInvalidRequest )
8585}
8686
87+ func TestStoppedSnapshotRestoreRejectsIncompatibleMicroVMSwitch (t * testing.T ) {
88+ t .Parallel ()
89+ mgr , _ := setupTestManager (t )
90+ if _ , err := mgr .getVMStarter (hypervisor .TypeQEMUMicroVM ); err != nil {
91+ t .Skipf ("qemu-microvm starter unavailable: %v" , err )
92+ }
93+ ctx := context .Background ()
94+
95+ sourceID := "snapshot-stopped-restore-microvm-src"
96+ createStoppedSnapshotSourceFixture (t , mgr , sourceID , "snapshot-stopped-restore-microvm-src" , mgr .defaultHypervisor )
97+
98+ sourceMeta , err := mgr .loadMetadata (sourceID )
99+ require .NoError (t , err )
100+ sourceMeta .HotplugSize = 1
101+ require .NoError (t , mgr .saveMetadata (sourceMeta ))
102+
103+ snap , err := mgr .CreateSnapshot (ctx , sourceID , CreateSnapshotRequest {
104+ Kind : SnapshotKindStopped ,
105+ Name : "stopped-microvm-restore" ,
106+ })
107+ require .NoError (t , err )
108+
109+ _ , err = mgr .RestoreSnapshot (ctx , sourceID , snap .Id , RestoreSnapshotRequest {
110+ TargetState : StateStopped ,
111+ TargetHypervisor : hypervisor .TypeQEMUMicroVM ,
112+ })
113+ require .Error (t , err )
114+ assert .ErrorIs (t , err , ErrInvalidRequest )
115+ assert .Contains (t , err .Error (), "does not support hotplug memory" )
116+
117+ after , err := mgr .loadMetadata (sourceID )
118+ require .NoError (t , err )
119+ assert .Equal (t , mgr .defaultHypervisor , after .HypervisorType )
120+ assert .Equal (t , int64 (1 ), after .HotplugSize )
121+ }
122+
123+ func TestStoppedSnapshotForkRejectsIncompatibleMicroVMSwitch (t * testing.T ) {
124+ t .Parallel ()
125+ mgr , _ := setupTestManager (t )
126+ if _ , err := mgr .getVMStarter (hypervisor .TypeQEMUMicroVM ); err != nil {
127+ t .Skipf ("qemu-microvm starter unavailable: %v" , err )
128+ }
129+ ctx := context .Background ()
130+
131+ sourceID := "snapshot-stopped-fork-microvm-src"
132+ createStoppedSnapshotSourceFixture (t , mgr , sourceID , "snapshot-stopped-fork-microvm-src" , mgr .defaultHypervisor )
133+
134+ sourceMeta , err := mgr .loadMetadata (sourceID )
135+ require .NoError (t , err )
136+ sourceMeta .HotplugSize = 1
137+ require .NoError (t , mgr .saveMetadata (sourceMeta ))
138+
139+ snap , err := mgr .CreateSnapshot (ctx , sourceID , CreateSnapshotRequest {
140+ Kind : SnapshotKindStopped ,
141+ Name : "stopped-microvm-fork" ,
142+ })
143+ require .NoError (t , err )
144+
145+ _ , err = mgr .ForkSnapshot (ctx , snap .Id , ForkSnapshotRequest {
146+ Name : "snapshot-fork-microvm-invalid" ,
147+ TargetState : StateStopped ,
148+ TargetHypervisor : hypervisor .TypeQEMUMicroVM ,
149+ })
150+ require .Error (t , err )
151+ assert .ErrorIs (t , err , ErrInvalidRequest )
152+ assert .Contains (t , err .Error (), "does not support hotplug memory" )
153+ }
154+
87155func TestRestoreSnapshotCancelsSourceInstanceCompressionJob (t * testing.T ) {
88156 t .Parallel ()
89157
0 commit comments