@@ -139,6 +139,7 @@ public FunctionsSyncManagerTests()
139139 _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteName ) ) . Returns ( ( string ) null ) ;
140140 _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSlotName ) ) . Returns ( ( string ) null ) ;
141141 _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebJobsFeatureFlags ) ) . Returns ( ( string ) null ) ;
142+ _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSku ) ) . Returns ( ( string ) ScriptConstants . DynamicSku ) ;
142143
143144 _hostNameProvider = new HostNameProvider ( _mockEnvironment . Object ) ;
144145
@@ -152,7 +153,7 @@ public FunctionsSyncManagerTests()
152153 _functionsSyncManager = new FunctionsSyncManager ( configuration , hostIdProviderMock . Object , optionsMonitor , loggerFactory . CreateLogger < FunctionsSyncManager > ( ) , httpClientFactory , _secretManagerProviderMock . Object , _mockWebHostEnvironment . Object , _mockEnvironment . Object , _hostNameProvider , functionMetadataManager , azureBlobStorageProvider ) ;
153154 }
154155
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" )
156157 {
157158 string taskHubSegment = postedTaskHub != null ? $ ",\" taskHubName\" :\" { postedTaskHub } \" " : "" ;
158159 string storageProviderSegment = postedConnection != null && durableVersion == "V2" ? $ ",\" storageProvider\" :{{\" connectionStringName\" :\" DurableConnection\" }}" : "" ;
@@ -180,9 +181,13 @@ public async Task TrySyncTriggers_StandbyMode_ReturnsFalse()
180181 }
181182 }
182183
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 )
185188 {
189+ _mockEnvironment . Setup ( p => p . GetEnvironmentVariable ( EnvironmentSettingNames . AzureWebsiteSku ) ) . Returns ( sku ) ;
190+
186191 // create a dummy file that pushes us over size
187192 string maxString = new string ( 'x' , ScriptConstants . MaxTriggersStringLength + 1 ) ;
188193 _function1 = $ "{{ bindings: [], test: '{ maxString } '}}";
@@ -196,8 +201,21 @@ public async Task TrySyncTriggers_MaxSyncTriggersPayloadSize_Succeeds()
196201
197202 string syncString = _contentBuilder . ToString ( ) ;
198203 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 ) ;
201219 }
202220 }
203221
@@ -256,13 +274,35 @@ public async Task TrySyncTriggers_PostsExpectedContent(bool cacheEnabled)
256274 }
257275 }
258276
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+
259303 private void VerifyResultWithCacheOn ( string connection = DefaultTestConnection , string expectedTaskHub = "TestHubValue" , string durableVersion = "V2" )
260304 {
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 ) ;
266306
267307 // verify functions
268308 var functions = ( JArray ) result [ "functions" ] ;
@@ -285,31 +325,55 @@ private void VerifyResultWithCacheOn(string connection = DefaultTestConnection,
285325 Assert . Equal ( "function1" , function1Secrets [ "name" ] ) ;
286326 Assert . Equal ( "aaa" , ( string ) function1Secrets [ "secrets" ] [ "TestFunctionKey1" ] ) ;
287327 Assert . Equal ( "bbb" , ( string ) function1Secrets [ "secrets" ] [ "TestFunctionKey2" ] ) ;
328+ }
288329
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 ) ;
296333
297- Assert . Equal ( expectedSyncTriggersPayload , logObject [ "triggers" ] . ToString ( Formatting . None ) ) ;
298- Assert . False ( triggersLog . Contains ( "secrets" ) ) ;
334+ Assert . Null ( result [ "functions" ] ) ;
299335 }
300336
301- private void VerifyResultWithCacheOff ( string durableVersion )
337+ public JObject VerifyResultCommon ( string connection = DefaultTestConnection , string expectedTaskHub = "TestHubValue" , string durableVersion = "V2" )
302338 {
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 ) ) ;
306356
307357 var logs = _loggerProvider . GetAllLogMessages ( ) . Where ( m => m . Category . Equals ( SyncManagerLogCategory ) ) . ToList ( ) ;
308358 var log = logs [ 0 ] ;
309359 int startIdx = log . FormattedMessage . IndexOf ( "Content=" ) + 8 ;
310360 int endIdx = log . FormattedMessage . LastIndexOf ( ')' ) ;
311361 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 ;
313377 }
314378
315379 [ Fact ]
@@ -375,7 +439,7 @@ public async Task TrySyncTriggers_BackgroundSync_PostsExpectedContent()
375439 Assert . Equal ( 1 , _mockHttpHandler . RequestCount ) ;
376440 var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
377441 var triggers = result [ "triggers" ] ;
378- Assert . Equal ( GetExpectedSyncTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
442+ Assert . Equal ( GetExpectedTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
379443
380444 string hash = string . Empty ;
381445 var downloadResponse = await hashBlob . DownloadAsync ( ) ;
@@ -441,7 +505,7 @@ public async Task TrySyncTriggers_BackgroundSync_SetTriggersFailure_HashNotUpdat
441505 Assert . Equal ( 1 , _mockHttpHandler . RequestCount ) ;
442506 var result = JObject . Parse ( _contentBuilder . ToString ( ) ) ;
443507 var triggers = result [ "triggers" ] ;
444- Assert . Equal ( GetExpectedSyncTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
508+ Assert . Equal ( GetExpectedTriggersPayload ( durableVersion : "V1" ) , triggers . ToString ( Formatting . None ) ) ;
445509 bool hashBlobExists = await hashBlob . ExistsAsync ( ) ;
446510 Assert . False ( hashBlobExists ) ;
447511
0 commit comments