github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/controlapi/task_test.go (about) 1 package controlapi 2 3 import ( 4 "context" 5 "strings" 6 "testing" 7 8 "github.com/docker/swarmkit/testutils" 9 "google.golang.org/grpc/codes" 10 11 "github.com/docker/swarmkit/api" 12 "github.com/docker/swarmkit/identity" 13 "github.com/docker/swarmkit/manager/state/store" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func createTask(t *testing.T, ts *testServer, desiredState api.TaskState) *api.Task { 18 task := &api.Task{ 19 ID: identity.NewID(), 20 DesiredState: desiredState, 21 Spec: api.TaskSpec{ 22 Runtime: &api.TaskSpec_Container{ 23 Container: &api.ContainerSpec{}, 24 }, 25 }, 26 } 27 err := ts.Store.Update(func(tx store.Tx) error { 28 return store.CreateTask(tx, task) 29 }) 30 assert.NoError(t, err) 31 return task 32 } 33 34 func TestGetTask(t *testing.T) { 35 ts := newTestServer(t) 36 defer ts.Stop() 37 38 _, err := ts.Client.GetTask(context.Background(), &api.GetTaskRequest{}) 39 assert.Error(t, err) 40 assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err)) 41 42 _, err = ts.Client.GetTask(context.Background(), &api.GetTaskRequest{TaskID: "invalid"}) 43 assert.Error(t, err) 44 assert.Equal(t, codes.NotFound, testutils.ErrorCode(err)) 45 46 task := createTask(t, ts, api.TaskStateRunning) 47 r, err := ts.Client.GetTask(context.Background(), &api.GetTaskRequest{TaskID: task.ID}) 48 assert.NoError(t, err) 49 assert.Equal(t, task.ID, r.Task.ID) 50 } 51 52 func TestRemoveTask(t *testing.T) { 53 // TODO 54 } 55 56 func TestListTasks(t *testing.T) { 57 ts := newTestServer(t) 58 defer ts.Stop() 59 r, err := ts.Client.ListTasks(context.Background(), &api.ListTasksRequest{}) 60 assert.NoError(t, err) 61 assert.Empty(t, r.Tasks) 62 63 t1 := createTask(t, ts, api.TaskStateRunning) 64 r, err = ts.Client.ListTasks(context.Background(), &api.ListTasksRequest{}) 65 assert.NoError(t, err) 66 assert.Equal(t, 1, len(r.Tasks)) 67 68 createTask(t, ts, api.TaskStateRunning) 69 createTask(t, ts, api.TaskStateShutdown) 70 r, err = ts.Client.ListTasks(context.Background(), &api.ListTasksRequest{}) 71 assert.NoError(t, err) 72 assert.Equal(t, 3, len(r.Tasks)) 73 74 // List with an ID prefix. 75 r, err = ts.Client.ListTasks(context.Background(), &api.ListTasksRequest{ 76 Filters: &api.ListTasksRequest_Filters{ 77 IDPrefixes: []string{t1.ID[0:4]}, 78 }, 79 }) 80 assert.NoError(t, err) 81 assert.NotEmpty(t, r.Tasks) 82 for _, task := range r.Tasks { 83 assert.True(t, strings.HasPrefix(task.ID, t1.ID[0:4])) 84 } 85 86 // List by desired state. 87 r, err = ts.Client.ListTasks(context.Background(), 88 &api.ListTasksRequest{ 89 Filters: &api.ListTasksRequest_Filters{ 90 DesiredStates: []api.TaskState{api.TaskStateRunning}, 91 }, 92 }, 93 ) 94 assert.NoError(t, err) 95 assert.Equal(t, 2, len(r.Tasks)) 96 r, err = ts.Client.ListTasks(context.Background(), 97 &api.ListTasksRequest{ 98 Filters: &api.ListTasksRequest_Filters{ 99 DesiredStates: []api.TaskState{api.TaskStateShutdown}, 100 }, 101 }, 102 ) 103 assert.NoError(t, err) 104 assert.Equal(t, 1, len(r.Tasks)) 105 r, err = ts.Client.ListTasks(context.Background(), 106 &api.ListTasksRequest{ 107 Filters: &api.ListTasksRequest_Filters{ 108 DesiredStates: []api.TaskState{api.TaskStateRunning, api.TaskStateShutdown}, 109 }, 110 }, 111 ) 112 assert.NoError(t, err) 113 assert.Equal(t, 3, len(r.Tasks)) 114 }