@@ -14,11 +14,12 @@ import {
14
14
import { msToNumber , tsToMs } from '@temporalio/common/lib/time' ;
15
15
import { decode as payloadDecode , decodeFromPayloadsAtIndex } from '@temporalio/common/lib/internal-non-workflow' ;
16
16
17
- import { condition , defineQuery , defineSignal , setDefaultQueryHandler , setHandler , sleep } from '@temporalio/workflow' ;
17
+ import { condition , defineQuery , defineSignal , defineUpdate , setDefaultQueryHandler , setDefaultSignalHandler , setHandler , sleep } from '@temporalio/workflow' ;
18
18
import { configurableHelpers , createTestWorkflowBundle } from './helpers-integration' ;
19
19
import * as activities from './activities' ;
20
20
import * as workflows from './workflows' ;
21
21
import { makeTestFn , configMacro } from './helpers-integration-multi-codec' ;
22
+ import { reservedPrefixes } from '@temporalio/common/src/reserved' ;
22
23
23
24
// Note: re-export shared workflows (or long workflows)
24
25
// - review the files where these workflows are shared
@@ -751,3 +752,78 @@ test('default query handler is not used if requested query exists', configMacro,
751
752
t . deepEqual ( result , { name : definedQuery . name , args } ) ;
752
753
} ) ;
753
754
} ) ;
755
+
756
+ test ( 'Cannot register activities using reserved prefixes' , configMacro , async ( t , config ) => {
757
+ const { createWorkerWithDefaults } = config ;
758
+
759
+ for ( const prefix of reservedPrefixes ) {
760
+ const activityName = prefix + "_test"
761
+ await t . throwsAsync ( createWorkerWithDefaults ( t , {
762
+ activities : { [ activityName ] : ( ) => { } }
763
+ } ) , { instanceOf : Error , message : `Cannot register activity name: '${ activityName } ', with reserved prefix: '${ prefix } '` } )
764
+ }
765
+ } )
766
+
767
+ test ( 'Cannot register task queues using reserved prefixes' , configMacro , async ( t , config ) => {
768
+ const { createWorkerWithDefaults } = config ;
769
+
770
+ for ( const prefix of reservedPrefixes ) {
771
+ const taskQueue = prefix + "_test"
772
+
773
+ await t . throwsAsync ( createWorkerWithDefaults ( t , {
774
+ taskQueue,
775
+ } ) , { instanceOf : Error , message : `Cannot register task queue name: '${ taskQueue } ', with reserved prefix: '${ prefix } '` } )
776
+ }
777
+ } )
778
+
779
+ interface HandlerError {
780
+ name : string ;
781
+ message : string ;
782
+ }
783
+
784
+ export async function workflowBadPrefixHandler ( prefix : string ) : Promise < HandlerError [ ] > {
785
+ // Re-package errors, default payload converter has trouble converting native errors (no 'data' field).
786
+ const expectedErrors : HandlerError [ ] = [ ]
787
+ try {
788
+ setHandler ( defineSignal ( prefix + '_signal' ) , ( ) => { } )
789
+ } catch ( e ) {
790
+ if ( e instanceof Error ) {
791
+ expectedErrors . push ( { name : e . name , message : e . message } )
792
+ }
793
+ }
794
+ try {
795
+ setHandler ( defineUpdate ( prefix + '_update' ) , ( ) => { } )
796
+ } catch ( e ) {
797
+ if ( e instanceof Error ) {
798
+ expectedErrors . push ( { name : e . name , message : e . message } )
799
+ }
800
+ }
801
+ try {
802
+ setHandler ( defineQuery ( prefix + '_query' ) , ( ) => { } )
803
+ } catch ( e ) {
804
+ if ( e instanceof Error ) {
805
+ expectedErrors . push ( { name : e . name , message : e . message } )
806
+ }
807
+ }
808
+ return expectedErrors
809
+ }
810
+
811
+ test ( 'Workflow failure if define signals/updates/queries with reserved prefixes' , configMacro , async ( t , config ) => {
812
+ const { env, createWorkerWithDefaults } = config ;
813
+ const { executeWorkflow } = configurableHelpers ( t , t . context . workflowBundle , env ) ;
814
+ const worker = await createWorkerWithDefaults ( t ) ;
815
+ await worker . runUntil ( async ( ) => {
816
+ const prefix = reservedPrefixes [ 0 ]
817
+ // for (const prefix of reservedPrefixes) {
818
+ const result = await executeWorkflow ( workflowBadPrefixHandler , {
819
+ args : [ prefix ]
820
+ } ) ;
821
+ console . log ( "result" , result )
822
+ t . deepEqual ( result , [
823
+ { name : 'Error' , message : `Cannot register signal name: '${ prefix } _signal', with reserved prefix: '${ prefix } '` } ,
824
+ { name : 'Error' , message : `Cannot register update name: '${ prefix } _update', with reserved prefix: '${ prefix } '` } ,
825
+ { name : 'Error' , message : `Cannot register query name: '${ prefix } _query', with reserved prefix: '${ prefix } '` } ,
826
+ ] )
827
+ // }
828
+ } )
829
+ } )
0 commit comments