@@ -14,7 +14,16 @@ import { searchAttributePayloadConverter } from '@temporalio/common/lib/converte
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 {
18+ condition ,
19+ defineQuery ,
20+ defineSignal ,
21+ defineUpdate ,
22+ setDefaultQueryHandler ,
23+ setHandler ,
24+ sleep ,
25+ } from '@temporalio/workflow' ;
26+ import { reservedPrefixes } from '@temporalio/common/lib/reserved' ;
1827import { configurableHelpers , createTestWorkflowBundle } from './helpers-integration' ;
1928import * as activities from './activities' ;
2029import * as workflows from './workflows' ;
@@ -763,3 +772,90 @@ test.serial('default query handler is not used if requested query exists', confi
763772 t . deepEqual ( result , { name : definedQuery . name , args } ) ;
764773 } ) ;
765774} ) ;
775+
776+ test ( 'Cannot register activities using reserved prefixes' , configMacro , async ( t , config ) => {
777+ const { createWorkerWithDefaults } = config ;
778+
779+ for ( const prefix of reservedPrefixes ) {
780+ const activityName = prefix + '_test' ;
781+ await t . throwsAsync (
782+ createWorkerWithDefaults ( t , {
783+ activities : { [ activityName ] : ( ) => { } } ,
784+ } ) ,
785+ {
786+ instanceOf : Error ,
787+ message : `Cannot register activity name: '${ activityName } ', with reserved prefix: '${ prefix } '` ,
788+ }
789+ ) ;
790+ }
791+ } ) ;
792+
793+ test ( 'Cannot register task queues using reserved prefixes' , configMacro , async ( t , config ) => {
794+ const { createWorkerWithDefaults } = config ;
795+
796+ for ( const prefix of reservedPrefixes ) {
797+ const taskQueue = prefix + '_test' ;
798+
799+ await t . throwsAsync (
800+ createWorkerWithDefaults ( t , {
801+ taskQueue,
802+ } ) ,
803+ {
804+ instanceOf : Error ,
805+ message : `Cannot register task queue name: '${ taskQueue } ', with reserved prefix: '${ prefix } '` ,
806+ }
807+ ) ;
808+ }
809+ } ) ;
810+
811+ interface HandlerError {
812+ name : string ;
813+ message : string ;
814+ }
815+
816+ export async function workflowBadPrefixHandler ( prefix : string ) : Promise < HandlerError [ ] > {
817+ // Re-package errors, default payload converter has trouble converting native errors (no 'data' field).
818+ const expectedErrors : HandlerError [ ] = [ ] ;
819+ try {
820+ setHandler ( defineSignal ( prefix + '_signal' ) , ( ) => { } ) ;
821+ } catch ( e ) {
822+ if ( e instanceof Error ) {
823+ expectedErrors . push ( { name : e . name , message : e . message } ) ;
824+ }
825+ }
826+ try {
827+ setHandler ( defineUpdate ( prefix + '_update' ) , ( ) => { } ) ;
828+ } catch ( e ) {
829+ if ( e instanceof Error ) {
830+ expectedErrors . push ( { name : e . name , message : e . message } ) ;
831+ }
832+ }
833+ try {
834+ setHandler ( defineQuery ( prefix + '_query' ) , ( ) => { } ) ;
835+ } catch ( e ) {
836+ if ( e instanceof Error ) {
837+ expectedErrors . push ( { name : e . name , message : e . message } ) ;
838+ }
839+ }
840+ return expectedErrors ;
841+ }
842+
843+ test ( 'Workflow failure if define signals/updates/queries with reserved prefixes' , configMacro , async ( t , config ) => {
844+ const { env, createWorkerWithDefaults } = config ;
845+ const { executeWorkflow } = configurableHelpers ( t , t . context . workflowBundle , env ) ;
846+ const worker = await createWorkerWithDefaults ( t ) ;
847+ await worker . runUntil ( async ( ) => {
848+ const prefix = reservedPrefixes [ 0 ] ;
849+ // for (const prefix of reservedPrefixes) {
850+ const result = await executeWorkflow ( workflowBadPrefixHandler , {
851+ args : [ prefix ] ,
852+ } ) ;
853+ console . log ( 'result' , result ) ;
854+ t . deepEqual ( result , [
855+ { name : 'Error' , message : `Cannot register signal name: '${ prefix } _signal', with reserved prefix: '${ prefix } '` } ,
856+ { name : 'Error' , message : `Cannot register update name: '${ prefix } _update', with reserved prefix: '${ prefix } '` } ,
857+ { name : 'Error' , message : `Cannot register query name: '${ prefix } _query', with reserved prefix: '${ prefix } '` } ,
858+ ] ) ;
859+ // }
860+ } ) ;
861+ } ) ;
0 commit comments