Skip to content

Commit e7a514d

Browse files
authored
#55 Fix sigsegv on ListTasks when queue is already deleted (#74)
1 parent 40e1a30 commit e7a514d

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

emulator.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,10 @@ func (s *Server) TestIamPermissions(ctx context.Context, in *v1.TestIamPermissio
226226
// ListTasks lists the tasks in the specified queue
227227
func (s *Server) ListTasks(ctx context.Context, in *tasks.ListTasksRequest) (*tasks.ListTasksResponse, error) {
228228
// TODO: Implement pageing of some sort
229-
queue, _ := s.fetchQueue(in.GetParent())
229+
queue, ok := s.fetchQueue(in.GetParent())
230+
if !ok || queue == nil {
231+
return nil, status.Errorf(codes.NotFound, "Queue does not exist. If you just created the queue, wait at least a minute for the queue to initialize.")
232+
}
230233

231234
var taskStates []*tasks.Task
232235

emulator_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,57 @@ func TestPurgeQueueOptionallyPerformsHardReset(t *testing.T) {
388388
)
389389
}
390390

391+
func TestListTasks(t *testing.T) {
392+
serv, client := setUp(t, ServerOptions{})
393+
defer tearDown(t, serv)
394+
395+
srv, _ := startTestServer()
396+
defer srv.Shutdown(context.Background())
397+
398+
createdQueue := createTestQueue(t, client)
399+
400+
createTaskRequest := taskspb.CreateTaskRequest{
401+
Parent: createdQueue.GetName(),
402+
Task: &taskspb.Task{
403+
Name: createdQueue.GetName() + "/tasks/my-test-task",
404+
MessageType: &taskspb.Task_HttpRequest{
405+
HttpRequest: &taskspb.HttpRequest{
406+
Url: "http://localhost:5000/success",
407+
},
408+
},
409+
},
410+
}
411+
412+
createdTask, err := client.CreateTask(context.Background(), &createTaskRequest)
413+
require.NoError(t, err)
414+
415+
listTasksRequest := taskspb.ListTasksRequest{
416+
Parent: createdQueue.GetName(),
417+
}
418+
419+
tasksIterator := client.ListTasks(context.Background(), &listTasksRequest)
420+
assert.NoError(t, err)
421+
422+
listedTask, err := tasksIterator.Next()
423+
assert.NoError(t, err)
424+
assert.Equal(t, listedTask.GetName(), createdTask.GetName())
425+
_, err = tasksIterator.Next()
426+
assert.EqualError(t, err, "no more items in iterator")
427+
428+
deleteQueueRequest := taskspb.DeleteQueueRequest{
429+
Name: createdQueue.GetName(),
430+
}
431+
err = client.DeleteQueue(context.Background(), &deleteQueueRequest)
432+
require.NoError(t, err)
433+
434+
tasksIterator = client.ListTasks(context.Background(), &listTasksRequest)
435+
assert.NoError(t, err)
436+
437+
listedTask, err = tasksIterator.Next()
438+
assertIsGrpcError(t, "^Queue does not exist", grpcCodes.NotFound, err)
439+
assert.Nil(t, listedTask)
440+
}
441+
391442
func TestSuccessTaskExecution(t *testing.T) {
392443
serv, client := setUp(t, ServerOptions{})
393444
defer tearDown(t, serv)

0 commit comments

Comments
 (0)