This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / spindle / engines / microvm / vm_test.go
1.4 kB 65 lines
1package microvm 2 3import ( 4 "context" 5 "errors" 6 "log/slog" 7 "testing" 8 9 "tangled.org/core/spindle/models" 10) 11 12type shutdownTestVM struct { 13 exited bool 14 waitErr error 15 shutdownErr error 16 closed bool 17} 18 19func (v *shutdownTestVM) Shutdown(context.Context) error { 20 v.exited = true 21 return v.shutdownErr 22} 23 24func (v *shutdownTestVM) WaitContext(ctx context.Context) error { 25 if v.exited { 26 return v.waitErr 27 } 28 return ctx.Err() 29} 30 31func (v *shutdownTestVM) Close() error { 32 v.closed = true 33 return nil 34} 35 36func (*shutdownTestVM) Logs() VMLogs { return VMLogs{} } 37func (*shutdownTestVM) CID() uint32 { return 0 } 38func (*shutdownTestVM) WorkDir() string { return "" } 39func (*shutdownTestVM) OOMKilled() bool { return false } 40 41func TestShutdownVM_TreatsExitedVMAsCleanedUp(t *testing.T) { 42 for name, vm := range map[string]*shutdownTestVM{ 43 "already exited": { 44 exited: true, 45 waitErr: errors.New("qemu exited"), 46 shutdownErr: errors.New("qmp broken pipe"), 47 }, 48 "exits during fallback": { 49 waitErr: errors.New("qemu exited"), 50 shutdownErr: errors.New("qmp broken pipe"), 51 }, 52 } { 53 t.Run(name, func(t *testing.T) { 54 e := &Engine{l: slog.Default()} 55 state := &workflowState{VM: vm} 56 57 if err := e.shutdownVM(context.Background(), models.WorkflowId{}, state); err != nil { 58 t.Fatalf("shutdownVM: %v", err) 59 } 60 if !vm.closed { 61 t.Fatal("expected vm handle to be closed") 62 } 63 }) 64 } 65}