@@ -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
5052type (
@@ -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