@@ -140,7 +140,9 @@ func TestFirecrackerStandbyAndRestore(t *testing.T) {
140140 Hypervisor : hypervisor .TypeFirecracker ,
141141 })
142142 require .NoError (t , err )
143- assert .Equal (t , StateRunning , inst .State )
143+ assert .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
144+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
145+ require .NoError (t , err )
144146
145147 inst , err = mgr .StandbyInstance (ctx , inst .Id )
146148 require .NoError (t , err )
@@ -149,6 +151,9 @@ func TestFirecrackerStandbyAndRestore(t *testing.T) {
149151
150152 inst , err = mgr .RestoreInstance (ctx , inst .Id )
151153 require .NoError (t , err )
154+ assert .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
155+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
156+ require .NoError (t , err )
152157 assert .Equal (t , StateRunning , inst .State )
153158
154159 inst , err = mgr .StopInstance (ctx , inst .Id )
@@ -159,6 +164,9 @@ func TestFirecrackerStandbyAndRestore(t *testing.T) {
159164 // Verify stopped -> start works after standby/restore lifecycle.
160165 inst , err = mgr .StartInstance (ctx , inst .Id , StartInstanceRequest {})
161166 require .NoError (t , err )
167+ assert .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
168+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
169+ require .NoError (t , err )
162170 assert .Equal (t , StateRunning , inst .State )
163171
164172 require .NoError (t , mgr .DeleteInstance (ctx , inst .Id ))
@@ -189,6 +197,9 @@ func TestFirecrackerStopClearsStaleSnapshot(t *testing.T) {
189197 Hypervisor : hypervisor .TypeFirecracker ,
190198 })
191199 require .NoError (t , err )
200+ require .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
201+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
202+ require .NoError (t , err )
192203 require .Equal (t , StateRunning , inst .State )
193204
194205 // Establish a realistic standby/restore lifecycle first.
@@ -199,6 +210,9 @@ func TestFirecrackerStopClearsStaleSnapshot(t *testing.T) {
199210
200211 inst , err = mgr .RestoreInstance (ctx , inst .Id )
201212 require .NoError (t , err )
213+ require .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
214+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
215+ require .NoError (t , err )
202216 require .Equal (t , StateRunning , inst .State )
203217
204218 // Simulate stale snapshot residue from a prior failure/interruption.
@@ -222,6 +236,9 @@ func TestFirecrackerStopClearsStaleSnapshot(t *testing.T) {
222236
223237 inst , err = mgr .StartInstance (ctx , inst .Id , StartInstanceRequest {})
224238 require .NoError (t , err )
239+ assert .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
240+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
241+ require .NoError (t , err )
225242 assert .Equal (t , StateRunning , inst .State )
226243
227244 require .NoError (t , mgr .DeleteInstance (ctx , inst .Id ))
@@ -257,6 +274,8 @@ func TestFirecrackerNetworkLifecycle(t *testing.T) {
257274 })
258275 require .NoError (t , err )
259276 require .NotNil (t , inst )
277+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
278+ require .NoError (t , err )
260279
261280 alloc , err := mgr .networkManager .GetAllocation (ctx , inst .Id )
262281 require .NoError (t , err )
@@ -311,6 +330,9 @@ func TestFirecrackerNetworkLifecycle(t *testing.T) {
311330
312331 inst , err = mgr .RestoreInstance (ctx , inst .Id )
313332 require .NoError (t , err )
333+ assert .Contains (t , []State {StateInitializing , StateRunning }, inst .State )
334+ inst , err = waitForInstanceState (ctx , mgr , inst .Id , StateRunning , 20 * time .Second )
335+ require .NoError (t , err )
314336 assert .Equal (t , StateRunning , inst .State )
315337
316338 allocRestored , err := mgr .networkManager .GetAllocation (ctx , inst .Id )
@@ -376,6 +398,8 @@ func TestFirecrackerForkFromRunningNetwork(t *testing.T) {
376398 Hypervisor : hypervisor .TypeFirecracker ,
377399 })
378400 require .NoError (t , err )
401+ source , err = waitForInstanceState (ctx , mgr , source .Id , StateRunning , 20 * time .Second )
402+ require .NoError (t , err )
379403 sourceID := source .Id
380404 t .Cleanup (func () { _ = mgr .DeleteInstance (context .Background (), sourceID ) })
381405 assert .NotEmpty (t , source .IP )
@@ -391,6 +415,9 @@ func TestFirecrackerForkFromRunningNetwork(t *testing.T) {
391415 TargetState : StateRunning ,
392416 })
393417 require .NoError (t , err )
418+ require .Contains (t , []State {StateInitializing , StateRunning }, forked .State )
419+ forked , err = waitForInstanceState (ctx , mgr , forked .Id , StateRunning , 20 * time .Second )
420+ require .NoError (t , err )
394421 require .Equal (t , StateRunning , forked .State )
395422 forkID := forked .Id
396423 t .Cleanup (func () { _ = mgr .DeleteInstance (context .Background (), forkID ) })
@@ -404,6 +431,10 @@ func TestFirecrackerForkFromRunningNetwork(t *testing.T) {
404431
405432 sourceAfterFork , err := mgr .GetInstance (ctx , sourceID )
406433 require .NoError (t , err )
434+ if sourceAfterFork .State != StateRunning {
435+ sourceAfterFork , err = waitForInstanceState (ctx , mgr , sourceID , StateRunning , 20 * time .Second )
436+ require .NoError (t , err )
437+ }
407438 require .Equal (t , StateRunning , sourceAfterFork .State )
408439 assert .NotEmpty (t , sourceAfterFork .IP )
409440 assert .NotEmpty (t , sourceAfterFork .MAC )
0 commit comments