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  }