@@ -139,6 +139,7 @@ public FunctionsSyncManagerTests()
139
139
_mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteName ) ) . Returns ( ( string ) null ) ;
140
140
_mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSlotName ) ) . Returns ( ( string ) null ) ;
141
141
_mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebJobsFeatureFlags ) ) . Returns ( ( string ) null ) ;
142
+ _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSku ) ) . Returns ( ( string ) ScriptConstants . DynamicSku ) ;
142
143
143
144
_hostNameProvider = new HostNameProvider ( _mockEnvironment . Object ) ;
144
145
@@ -152,7 +153,7 @@ public FunctionsSyncManagerTests()
152
153
_functionsSyncManager = new FunctionsSyncManager ( configuration , hostIdProviderMock . Object , optionsMonitor , loggerFactory . CreateLogger < FunctionsSyncManager > ( ) , httpClientFactory , _secretManagerProviderMock . Object , _mockWebHostEnvironment . Object , _mockEnvironment . Object , _hostNameProvider , functionMetadataManager , azureBlobStorageProvider ) ;
153
154
}
154
155
155
- private string GetExpectedSyncTriggersPayload ( string postedConnection = DefaultTestConnection , string postedTaskHub = DefaultTestTaskHub , string durableVersion = "V2" )
156
+ private string GetExpectedTriggersPayload ( string postedConnection = DefaultTestConnection , string postedTaskHub = DefaultTestTaskHub , string durableVersion = "V2" )
156
157
{
157
158
string taskHubSegment = postedTaskHub != null ? $ ",\" taskHubName\" :\" { postedTaskHub } \" " : "" ;
158
159
string storageProviderSegment = postedConnection != null && durableVersion == "V2" ? $ ",\" storageProvider\" :{{\" connectionStringName\" :\" DurableConnection\" }}" : "" ;
@@ -180,9 +181,13 @@ public async Task TrySyncTriggers_StandbyMode_ReturnsFalse()
180
181
}
181
182
}
182
183
183
- [ Fact ]
184
- public async Task TrySyncTriggers_MaxSyncTriggersPayloadSize_Succeeds ( )
184
+ [ Theory ]
185
+ [ InlineData ( ScriptConstants . DynamicSku ) ]
186
+ [ InlineData ( ScriptConstants . FlexConsumptionSku ) ]
187
+ public async Task TrySyncTriggers_MaxSyncTriggersPayloadSize_Succeeds ( string sku )
185
188
{
189
+ _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSku ) ) . Returns ( sku ) ;
190
+
186
191
// create a dummy file that pushes us over size
187
192
string maxString = new string ( 'x' , ScriptConstants . MaxTriggersStringLength + 1 ) ;
188
193
_function1 = $ "{{ bindings: [], test: '{ maxString } '}}";
@@ -196,8 +201,21 @@ public async Task TrySyncTriggers_MaxSyncTriggersPayloadSize_Succeeds()
196
201
197
202
string syncString = _contentBuilder . ToString ( ) ;
198
203
Assert . True ( syncString . Length < ScriptConstants . MaxTriggersStringLength ) ;
199
- var syncContent = JToken . Parse ( syncString ) ;
200
- Assert . Equal ( JTokenType . Array , syncContent . Type ) ;
204
+ var syncContent = JObject . Parse ( syncString ) ;
205
+
206
+ if ( _mockEnvironment . Object . IsFlexConsumptionSku ( ) )
207
+ {
208
+ Assert . Equal ( 2 , syncContent . Count ) ;
209
+ Assert . Equal ( "testhostid123" , syncContent [ "hostId" ] ) ;
210
+ }
211
+ else
212
+ {
213
+ Assert . Equal ( 1 , syncContent . Count ) ;
214
+ Assert . Equal ( null , syncContent [ "hostId" ] ) ;
215
+ }
216
+
217
+ JArray triggers = ( JArray ) syncContent [ "triggers" ] ;
218
+ Assert . Equal ( 2 , triggers . Count ) ;
201
219
}
202
220
}
203
221
@@ -256,13 +274,35 @@ public async Task TrySyncTriggers_PostsExpectedContent(bool cacheEnabled)
256
274
}
257
275
}
258
276
277
+ [ Theory ]
278
+ [ InlineData ( ScriptConstants . DynamicSku ) ]
279
+ [ InlineData ( ScriptConstants . FlexConsumptionSku ) ]
280
+ public async Task TrySyncTriggers_PostsExpectedContent_BySku ( string sku )
281
+ {
282
+ _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSku ) ) . Returns ( sku ) ;
283
+
284
+ using ( var env = new TestScopedEnvironmentVariable ( _vars ) )
285
+ {
286
+ // Act
287
+ var syncResult = await _functionsSyncManager . TrySyncTriggersAsync ( ) ;
288
+
289
+ // Assert
290
+ Assert . True ( syncResult . Success , "SyncTriggers should return success true" ) ;
291
+ Assert . True ( string . IsNullOrEmpty ( syncResult . Error ) , "Error should be null or empty" ) ;
292
+
293
+ // verify expected headers
294
+ Assert . Equal ( ScriptConstants . FunctionsUserAgent , _mockHttpHandler . LastRequest . Headers . UserAgent . ToString ( ) ) ;
295
+ Assert . True ( _mockHttpHandler . LastRequest . Headers . Contains ( ScriptConstants . AntaresLogIdHeaderName ) ) ;
296
+ Assert . NotEmpty ( _mockHttpHandler . LastRequest . Headers . GetValues ( ScriptConstants . SiteRestrictedTokenHeaderName ) ) ;
297
+ Assert . NotEmpty ( _mockHttpHandler . LastRequest . Headers . GetValues ( ScriptConstants . SiteTokenHeaderName ) ) ;
298
+
299
+ VerifyResultWithCacheOn ( durableVersion : "V1" ) ;
300
+ }
301
+ }
302
+
259
303
private void VerifyResultWithCacheOn ( string connection = DefaultTestConnection , string expectedTaskHub = "TestHubValue" , string durableVersion = "V2" )
260
304
{
261
- string expectedSyncTriggersPayload = GetExpectedSyncTriggersPayload ( postedConnection : connection , postedTaskHub : expectedTaskHub , durableVersion ) ;
262
- // verify triggers
263
- var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
264
- var triggers = result [ "triggers" ] ;
265
- Assert . Equal ( expectedSyncTriggersPayload , triggers . ToString ( Formatting . None ) ) ;
305
+ var result = VerifyResultCommon ( connection , expectedTaskHub , durableVersion ) ;
266
306
267
307
// verify functions
268
308
var functions = ( JArray ) result [ "functions" ] ;
@@ -285,31 +325,55 @@ private void VerifyResultWithCacheOn(string connection = DefaultTestConnection,
285
325
Assert . Equal ( "function1" , function1Secrets [ "name" ] ) ;
286
326
Assert . Equal ( "aaa" , ( string ) function1Secrets [ "secrets" ] [ "TestFunctionKey1" ] ) ;
287
327
Assert . Equal ( "bbb" , ( string ) function1Secrets [ "secrets" ] [ "TestFunctionKey2" ] ) ;
328
+ }
288
329
289
- var logs = _loggerProvider . GetAllLogMessages ( ) . Where ( m => m . Category . Equals ( SyncManagerLogCategory ) ) . ToList ( ) ;
290
-
291
- var log = logs [ 0 ] ;
292
- int startIdx = log . FormattedMessage . IndexOf ( "Content=" ) + 8 ;
293
- int endIdx = log . FormattedMessage . LastIndexOf ( ')' ) ;
294
- var triggersLog = log . FormattedMessage . Substring ( startIdx , endIdx - startIdx ) . Trim ( ) ;
295
- var logObject = JObject . Parse ( triggersLog ) ;
330
+ private void VerifyResultWithCacheOff ( string durableVersion )
331
+ {
332
+ var result = VerifyResultCommon ( durableVersion : durableVersion ) ;
296
333
297
- Assert . Equal ( expectedSyncTriggersPayload , logObject [ "triggers" ] . ToString ( Formatting . None ) ) ;
298
- Assert . False ( triggersLog . Contains ( "secrets" ) ) ;
334
+ Assert . Null ( result [ "functions" ] ) ;
299
335
}
300
336
301
- private void VerifyResultWithCacheOff ( string durableVersion )
337
+ public JObject VerifyResultCommon ( string connection = DefaultTestConnection , string expectedTaskHub = "TestHubValue" , string durableVersion = "V2" )
302
338
{
303
- string expectedSyncTriggersPayload = GetExpectedSyncTriggersPayload ( durableVersion : durableVersion ) ;
304
- var triggers = JArray . Parse ( _contentBuilder . ToString ( ) ) ;
305
- Assert . Equal ( expectedSyncTriggersPayload , triggers . ToString ( Formatting . None ) ) ;
339
+ string expectedTriggersPayload = GetExpectedTriggersPayload ( postedConnection : connection , postedTaskHub : expectedTaskHub , durableVersion ) ;
340
+
341
+ var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
342
+
343
+ bool isFlexConsumptionSku = _mockEnvironment . Object . IsFlexConsumptionSku ( ) ;
344
+ if ( isFlexConsumptionSku )
345
+ {
346
+ Assert . Equal ( "testhostid123" , result [ "hostId" ] ) ;
347
+ }
348
+ else
349
+ {
350
+ Assert . Null ( result [ "hostId" ] ) ;
351
+ }
352
+
353
+ // verify triggers
354
+ var triggers = result [ "triggers" ] ;
355
+ Assert . Equal ( expectedTriggersPayload , triggers . ToString ( Formatting . None ) ) ;
306
356
307
357
var logs = _loggerProvider . GetAllLogMessages ( ) . Where ( m => m . Category . Equals ( SyncManagerLogCategory ) ) . ToList ( ) ;
308
358
var log = logs [ 0 ] ;
309
359
int startIdx = log . FormattedMessage . IndexOf ( "Content=" ) + 8 ;
310
360
int endIdx = log . FormattedMessage . LastIndexOf ( ')' ) ;
311
361
var triggersLog = log . FormattedMessage . Substring ( startIdx , endIdx - startIdx ) . Trim ( ) ;
312
- Assert . Equal ( expectedSyncTriggersPayload , triggersLog ) ;
362
+ var logObject = JObject . Parse ( triggersLog ) ;
363
+
364
+ if ( isFlexConsumptionSku )
365
+ {
366
+ Assert . Equal ( "testhostid123" , logObject [ "hostId" ] ) ;
367
+ }
368
+ else
369
+ {
370
+ Assert . Null ( logObject [ "hostId" ] ) ;
371
+ }
372
+
373
+ Assert . Equal ( expectedTriggersPayload , logObject [ "triggers" ] . ToString ( Formatting . None ) ) ;
374
+ Assert . False ( triggersLog . Contains ( "secrets" ) ) ;
375
+
376
+ return result ;
313
377
}
314
378
315
379
[ Fact ]
@@ -375,7 +439,7 @@ public async Task TrySyncTriggers_BackgroundSync_PostsExpectedContent()
375
439
Assert . Equal ( 1 , _mockHttpHandler . RequestCount ) ;
376
440
var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
377
441
var triggers = result [ "triggers" ] ;
378
- Assert . Equal ( GetExpectedSyncTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
442
+ Assert . Equal ( GetExpectedTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
379
443
380
444
string hash = string . Empty ;
381
445
var downloadResponse = await hashBlob . DownloadAsync ( ) ;
@@ -441,7 +505,7 @@ public async Task TrySyncTriggers_BackgroundSync_SetTriggersFailure_HashNotUpdat
441
505
Assert . Equal ( 1 , _mockHttpHandler . RequestCount ) ;
442
506
var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
443
507
var triggers = result [ "triggers" ] ;
444
- Assert . Equal ( GetExpectedSyncTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
508
+ Assert . Equal ( GetExpectedTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
445
509
bool hashBlobExists = await hashBlob . ExistsAsync ( ) ;
446
510
Assert . False ( hashBlobExists ) ;
447
511
0 commit comments