Skip to content

Commit 22f58a9

Browse files
authored
Add DeleteNamespace API unit tests (#2670)
1 parent 7bff5ee commit 22f58a9

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

service/frontend/operator_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func (h *OperatorHandlerImpl) DeleteNamespace(ctx context.Context, request *oper
313313
ctx,
314314
sdkclient.StartWorkflowOptions{
315315
TaskQueue: worker.DefaultWorkerTaskQueue,
316-
ID: deleteexecutions.WorkflowName,
316+
ID: deletenamespace.WorkflowName,
317317
},
318318
deletenamespace.WorkflowName,
319319
wfParams,

service/frontend/operator_handler_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ import (
4141
"go.temporal.io/api/serviceerror"
4242
sdkmocks "go.temporal.io/sdk/mocks"
4343

44+
"go.temporal.io/server/common/dynamicconfig"
4445
"go.temporal.io/server/common/metrics"
4546
"go.temporal.io/server/common/persistence/visibility/store/elasticsearch/client"
4647
"go.temporal.io/server/common/resource"
4748
"go.temporal.io/server/common/searchattribute"
49+
"go.temporal.io/server/service/worker/deletenamespace"
4850
)
4951

5052
type (
@@ -374,3 +376,82 @@ func (s *operatorHandlerSuite) Test_RemoveSearchAttributes() {
374376
s.NoError(err)
375377
s.NotNil(resp)
376378
}
379+
380+
func (s *operatorHandlerSuite) Test_DeleteNamespace() {
381+
handler := s.handler
382+
ctx := context.Background()
383+
384+
type test struct {
385+
Name string
386+
Request *operatorservice.DeleteNamespaceRequest
387+
Expected error
388+
}
389+
// request validation tests
390+
testCases1 := []test{
391+
{
392+
Name: "nil request",
393+
Request: nil,
394+
Expected: &serviceerror.InvalidArgument{Message: "Request is nil."},
395+
},
396+
{
397+
Name: "empty request",
398+
Request: &operatorservice.DeleteNamespaceRequest{},
399+
Expected: &serviceerror.InvalidArgument{Message: "Namespace is not set on request."},
400+
},
401+
}
402+
for _, testCase := range testCases1 {
403+
s.T().Run(testCase.Name, func(t *testing.T) {
404+
resp, err := handler.DeleteNamespace(ctx, testCase.Request)
405+
s.Equal(testCase.Expected, err)
406+
s.Nil(resp)
407+
})
408+
}
409+
410+
mockSdkClient := &sdkmocks.Client{}
411+
s.mockResource.SDKClientFactory.EXPECT().GetSystemClient(gomock.Any()).Return(mockSdkClient).AnyTimes()
412+
413+
handler.config = &Config{
414+
DeleteNamespaceDeleteActivityRPS: dynamicconfig.GetIntPropertyFn(22),
415+
DeleteNamespaceConcurrentDeleteExecutionsActivities: dynamicconfig.GetIntPropertyFn(8),
416+
}
417+
418+
// Start workflow failed.
419+
mockSdkClient.On("ExecuteWorkflow", mock.Anything, mock.Anything, "temporal-sys-delete-namespace-workflow", mock.Anything).Return(nil, errors.New("start failed")).Once()
420+
resp, err := handler.DeleteNamespace(ctx, &operatorservice.DeleteNamespaceRequest{
421+
Namespace: "test-namespace",
422+
})
423+
s.Error(err)
424+
s.Equal("Unable to start temporal-sys-delete-namespace-workflow workflow: start failed.", err.Error())
425+
s.Nil(resp)
426+
427+
// Workflow failed.
428+
mockRun := &sdkmocks.WorkflowRun{}
429+
mockRun.On("Get", mock.Anything, mock.Anything).Return(errors.New("workflow failed")).Once()
430+
const RunId = "9a9f668a-58b1-427e-bed6-bf1401049f7d"
431+
mockRun.On("GetRunID").Return(RunId).Once()
432+
mockSdkClient.On("ExecuteWorkflow", mock.Anything, mock.Anything, "temporal-sys-delete-namespace-workflow", mock.Anything).Return(mockRun, nil)
433+
resp, err = handler.DeleteNamespace(ctx, &operatorservice.DeleteNamespaceRequest{
434+
Namespace: "test-namespace",
435+
})
436+
s.Error(err)
437+
s.Equal(RunId, err.(*serviceerror.SystemWorkflow).WorkflowExecution.RunId)
438+
s.Equal(fmt.Sprintf("System Workflow with WorkflowId temporal-sys-delete-namespace-workflow and RunId %s returned an error: workflow failed", RunId), err.Error())
439+
s.Nil(resp)
440+
441+
// Success case.
442+
mockRun.On("Get", mock.Anything, mock.Anything).Return(func(ctx context.Context, valuePtr interface{}) error {
443+
wfResult := valuePtr.(*deletenamespace.DeleteNamespaceWorkflowResult)
444+
wfResult.DeletedNamespace = "test-namespace-deleted-ka2te"
445+
wfResult.DeletedNamespaceID = "c13c01a7-3887-4eda-ba4b-9a07a6359e7e"
446+
return nil
447+
})
448+
449+
resp, err = handler.DeleteNamespace(ctx, &operatorservice.DeleteNamespaceRequest{
450+
Namespace: "test-namespace",
451+
})
452+
s.NoError(err)
453+
s.NotNil(resp)
454+
s.Equal("test-namespace-deleted-ka2te", resp.DeletedNamespace)
455+
mockRun.AssertExpectations(s.T())
456+
mockSdkClient.AssertExpectations(s.T())
457+
}

0 commit comments

Comments
 (0)