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  }