@@ -14,11 +14,12 @@ import {
1414import { msToNumber , tsToMs } from '@temporalio/common/lib/time' ;
1515import { decode as payloadDecode , decodeFromPayloadsAtIndex } from '@temporalio/common/lib/internal-non-workflow' ;
1616
17- import { condition , defineQuery , defineSignal , setDefaultQueryHandler , setHandler , sleep } from '@temporalio/workflow' ;
17+ import { condition , defineQuery , defineSignal , defineUpdate , setDefaultQueryHandler , setDefaultSignalHandler , setHandler , sleep } from '@temporalio/workflow' ;
1818import { configurableHelpers , createTestWorkflowBundle } from './helpers-integration' ;
1919import * as activities from './activities' ;
2020import * as workflows from './workflows' ;
2121import { makeTestFn , configMacro } from './helpers-integration-multi-codec' ;
22+ import { reservedPrefixes } from '@temporalio/common/src/reserved' ;
2223
2324// Note: re-export shared workflows (or long workflows)
2425// - review the files where these workflows are shared
@@ -751,3 +752,78 @@ test('default query handler is not used if requested query exists', configMacro,
751752 t . deepEqual ( result , { name : definedQuery . name , args } ) ;
752753 } ) ;
753754} ) ;
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