github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/runc/libcontainer/state_linux_test.go (about) 1 // +build linux 2 3 package libcontainer 4 5 import "testing" 6 7 func TestStateStatus(t *testing.T) { 8 states := map[containerState]Status{ 9 &stoppedState{}: Stopped, 10 &runningState{}: Running, 11 &restoredState{}: Running, 12 &pausedState{}: Paused, 13 &createdState{}: Created, 14 } 15 for s, status := range states { 16 if s.status() != status { 17 t.Fatalf("state returned %s but expected %s", s.status(), status) 18 } 19 } 20 } 21 22 func isStateTransitionError(err error) bool { 23 _, ok := err.(*stateTransitionError) 24 return ok 25 } 26 27 func TestStoppedStateTransition(t *testing.T) { 28 s := &stoppedState{c: &linuxContainer{}} 29 valid := []containerState{ 30 &stoppedState{}, 31 &runningState{}, 32 &restoredState{}, 33 } 34 for _, v := range valid { 35 if err := s.transition(v); err != nil { 36 t.Fatal(err) 37 } 38 } 39 err := s.transition(&pausedState{}) 40 if err == nil { 41 t.Fatal("transition to paused state should fail") 42 } 43 if !isStateTransitionError(err) { 44 t.Fatal("expected stateTransitionError") 45 } 46 } 47 48 func TestPausedStateTransition(t *testing.T) { 49 s := &pausedState{c: &linuxContainer{}} 50 valid := []containerState{ 51 &pausedState{}, 52 &runningState{}, 53 &stoppedState{}, 54 } 55 for _, v := range valid { 56 if err := s.transition(v); err != nil { 57 t.Fatal(err) 58 } 59 } 60 } 61 62 func TestRestoredStateTransition(t *testing.T) { 63 s := &restoredState{c: &linuxContainer{}} 64 valid := []containerState{ 65 &stoppedState{}, 66 &runningState{}, 67 } 68 for _, v := range valid { 69 if err := s.transition(v); err != nil { 70 t.Fatal(err) 71 } 72 } 73 err := s.transition(&createdState{}) 74 if err == nil { 75 t.Fatal("transition to created state should fail") 76 } 77 if !isStateTransitionError(err) { 78 t.Fatal("expected stateTransitionError") 79 } 80 }