@@ -74,6 +74,12 @@ func TestSchema_Unmarshal(t *testing.T) {
7474 },
7575 "PerWorkflow": {
7676 "WASMMemoryLimit": "250mb",
77+ "ChainAllowed": {
78+ "Default": "false",
79+ "Values": {
80+ "1": "true"
81+ }
82+ },
7783 "CRONTrigger": {
7884 "RateLimit": "every10s:5"
7985 },
@@ -103,6 +109,10 @@ func TestSchema_Unmarshal(t *testing.T) {
103109 assert .Equal (t , 48 * time .Hour , cfg .PerOrg .ZeroBalancePruningTimeout .DefaultValue )
104110 assert .Equal (t , 99 , cfg .PerOwner .WorkflowExecutionConcurrencyLimit .DefaultValue )
105111 assert .Equal (t , 250 * config .MByte , cfg .PerWorkflow .WASMMemoryLimit .DefaultValue )
112+ assert .Equal (t , false , cfg .PerWorkflow .ChainAllowed .Default .DefaultValue )
113+ assert .Equal (t , "true" , cfg .PerWorkflow .ChainAllowed .Values ["1" ])
114+ assert .NotNil (t , cfg .PerWorkflow .ChainAllowed .Default .Parse )
115+ assert .NotNil (t , cfg .PerWorkflow .ChainAllowed .KeyFromCtx )
106116 assert .Equal (t , config.Rate {Limit : rate .Every (10 * time .Second ), Burst : 5 }, cfg .PerWorkflow .CRONTrigger .RateLimit .DefaultValue )
107117 assert .Equal (t , config.Rate {Limit : rate .Every (30 * time .Second ), Burst : 3 }, cfg .PerWorkflow .HTTPTrigger .RateLimit .DefaultValue )
108118 assert .Equal (t , config.Rate {Limit : rate .Every (13 * time .Second ), Burst : 6 }, cfg .PerWorkflow .LogTrigger .EventRateLimit .DefaultValue )
@@ -142,11 +152,6 @@ func TestDefaultGetter(t *testing.T) {
142152}` )
143153 reinit () // set default vars
144154
145- _ = `
146- [workflow.test-wf-id]
147- PerWorkflow.HTTPAction.CallLimit = 20
148- `
149-
150155 // Default unchanged
151156 got , err = limit .GetOrDefault (ctx , DefaultGetter )
152157 require .NoError (t , err )
@@ -158,3 +163,70 @@ PerWorkflow.HTTPAction.CallLimit = 20
158163 require .Equal (t , 20 , got )
159164
160165}
166+
167+ func TestDefaultGetter_SettingMap (t * testing.T ) {
168+ limit := Default .PerWorkflow .ChainAllowed
169+
170+ ctx := contexts .WithCRE (t .Context (), contexts.CRE {Owner : "owner-id" , Workflow : "foo" })
171+ ctx = contexts .WithChainSelector (ctx , 1234 )
172+ overrideCtx := contexts .WithCRE (t .Context (), contexts.CRE {Owner : "owner-id" , Workflow : "test-wf-id" })
173+ overrideCtx = contexts .WithChainSelector (overrideCtx , 1234 )
174+
175+ // None allowed by default
176+ got , err := limit .GetOrDefault (ctx , DefaultGetter )
177+ require .NoError (t , err )
178+ require .False (t , got )
179+ got , err = limit .GetOrDefault (overrideCtx , DefaultGetter )
180+ require .NoError (t , err )
181+ require .False (t , got )
182+
183+ t .Cleanup (reinit ) // restore default vars
184+
185+ // Org override to allow
186+ t .Setenv (envNameSettings , `{
187+ "workflow": {
188+ "test-wf-id": {
189+ "PerWorkflow": {
190+ "ChainAllowed": {
191+ "Values": {
192+ "1234": "true"
193+ }
194+ }
195+ }
196+ }
197+ }
198+ }` )
199+ reinit () // set default vars
200+ got , err = limit .GetOrDefault (ctx , DefaultGetter )
201+ require .NoError (t , err )
202+ require .False (t , got )
203+ got , err = limit .GetOrDefault (overrideCtx , DefaultGetter )
204+ require .NoError (t , err )
205+ require .True (t , got )
206+
207+ // Org override to allow by default, but disallow some
208+ t .Setenv (envNameSettings , `{
209+ "workflow": {
210+ "test-wf-id": {
211+ "PerWorkflow": {
212+ "ChainAllowed": {
213+ "Default": true,
214+ "Values": {
215+ "1234": "false"
216+ }
217+ }
218+ }
219+ }
220+ }
221+ }` )
222+ reinit () // set default vars
223+ got , err = limit .GetOrDefault (ctx , DefaultGetter )
224+ require .NoError (t , err )
225+ require .False (t , got )
226+ got , err = limit .GetOrDefault (overrideCtx , DefaultGetter )
227+ require .NoError (t , err )
228+ require .False (t , got )
229+ got , err = limit .GetOrDefault (contexts .WithChainSelector (overrideCtx , 42 ), DefaultGetter )
230+ require .NoError (t , err )
231+ require .True (t , got )
232+ }
0 commit comments