Skip to content

Commit 3dc9a77

Browse files
committed
Reset HostNameProvider on specialization
1 parent 8c7154c commit 3dc9a77

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

src/WebJobs.Script.WebHost/HostNameProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public virtual void Synchronize(HttpRequest request)
6363
}
6464
}
6565

66-
// for testing only
6766
internal void Reset()
6867
{
6968
_hostName = null;

src/WebJobs.Script.WebHost/Standby/StandbyManager.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class StandbyManager : IStandbyManager
2929
private readonly ILanguageWorkerChannelManager _languageWorkerChannelManager;
3030
private readonly IConfigurationRoot _configuration;
3131
private readonly ILogger _logger;
32+
private readonly HostNameProvider _hostNameProvider;
3233
private readonly TimeSpan _specializationTimerInterval = TimeSpan.FromMilliseconds(500);
3334

3435
private Timer _specializationTimer;
@@ -37,7 +38,7 @@ public class StandbyManager : IStandbyManager
3738
private static SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
3839

3940
public StandbyManager(IScriptHostManager scriptHostManager, ILanguageWorkerChannelManager languageWorkerChannelManager, IConfiguration configuration, IScriptWebHostEnvironment webHostEnvironment,
40-
IEnvironment environment, IOptionsMonitor<ScriptApplicationHostOptions> options, ILogger<StandbyManager> logger)
41+
IEnvironment environment, IOptionsMonitor<ScriptApplicationHostOptions> options, ILogger<StandbyManager> logger, HostNameProvider hostNameProvider)
4142
{
4243
_scriptHostManager = scriptHostManager ?? throw new ArgumentNullException(nameof(scriptHostManager));
4344
_options = options ?? throw new ArgumentNullException(nameof(options));
@@ -47,6 +48,7 @@ public StandbyManager(IScriptHostManager scriptHostManager, ILanguageWorkerChann
4748
_environment = environment ?? throw new ArgumentNullException(nameof(environment));
4849
_configuration = configuration as IConfigurationRoot ?? throw new ArgumentNullException(nameof(configuration));
4950
_languageWorkerChannelManager = languageWorkerChannelManager ?? throw new ArgumentNullException(nameof(languageWorkerChannelManager));
51+
_hostNameProvider = hostNameProvider ?? throw new ArgumentNullException(nameof(hostNameProvider));
5052
}
5153

5254
public static IChangeToken ChangeToken => _standbyChangeToken;
@@ -68,6 +70,8 @@ public async Task SpecializeHostCoreAsync()
6870
// Trigger a configuration reload to pick up all current settings
6971
_configuration?.Reload();
7072

73+
_hostNameProvider.Reset();
74+
7175
await _languageWorkerChannelManager.SpecializeAsync();
7276
NotifyChange();
7377
await _scriptHostManager.RestartHostAsync();

test/WebJobs.Script.Tests/StandbyManagerTests.cs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
using Microsoft.Azure.WebJobs.Script.Rpc;
99
using Microsoft.Azure.WebJobs.Script.WebHost;
1010
using Microsoft.Extensions.Configuration;
11+
using Microsoft.Extensions.Logging;
1112
using Microsoft.Extensions.Logging.Abstractions;
1213
using Microsoft.Extensions.Options;
14+
using Microsoft.WebJobs.Script.Tests;
1315
using Moq;
1416
using Xunit;
1517

@@ -25,6 +27,8 @@ public class StandbyManagerTests
2527
private TestEnvironment _testEnvironment;
2628
private string _testSettingName = "TestSetting";
2729
private string _testSettingValue = "TestSettingValue";
30+
private ILoggerProvider _testLoggerProvider;
31+
private ILoggerFactory _testLoggerFactory;
2832

2933
public StandbyManagerTests()
3034
{
@@ -35,18 +39,41 @@ public StandbyManagerTests()
3539
_mockWebHostEnvironment = new Mock<IScriptWebHostEnvironment>();
3640
_mockLanguageWorkerChannelManager = new Mock<ILanguageWorkerChannelManager>();
3741
_testEnvironment = new TestEnvironment();
42+
43+
_testLoggerProvider = new TestLoggerProvider();
44+
_testLoggerFactory = new LoggerFactory();
45+
_testLoggerFactory.AddProvider(_testLoggerProvider);
3846
}
3947

4048
[Fact]
4149
public async Task Specialize_ResetsConfiguration()
4250
{
43-
var manager = new StandbyManager(_mockHostManager.Object, _mockLanguageWorkerChannelManager.Object, _mockConfiguration.Object, _mockWebHostEnvironment.Object, _testEnvironment, _mockOptionsMonitor.Object, NullLogger<StandbyManager>.Instance);
51+
var hostNameProvider = new HostNameProvider(_testEnvironment, _testLoggerFactory.CreateLogger<HostNameProvider>());
52+
var manager = new StandbyManager(_mockHostManager.Object, _mockLanguageWorkerChannelManager.Object, _mockConfiguration.Object, _mockWebHostEnvironment.Object, _testEnvironment, _mockOptionsMonitor.Object, NullLogger<StandbyManager>.Instance, hostNameProvider);
4453

4554
await manager.SpecializeHostAsync();
4655

4756
_mockConfiguration.Verify(c => c.Reload());
4857
}
4958

59+
[Fact]
60+
public async Task Specialize_ResetsHostNameProvider()
61+
{
62+
_testEnvironment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName, "placeholder.azurewebsites.net");
63+
64+
var hostNameProvider = new HostNameProvider(_testEnvironment, _testLoggerFactory.CreateLogger<HostNameProvider>());
65+
var manager = new StandbyManager(_mockHostManager.Object, _mockLanguageWorkerChannelManager.Object, _mockConfiguration.Object, _mockWebHostEnvironment.Object, _testEnvironment, _mockOptionsMonitor.Object, NullLogger<StandbyManager>.Instance, hostNameProvider);
66+
67+
Assert.Equal("placeholder.azurewebsites.net", hostNameProvider.Value);
68+
69+
await manager.SpecializeHostAsync();
70+
71+
_testEnvironment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName, "testapp.azurewebsites.net");
72+
Assert.Equal("testapp.azurewebsites.net", hostNameProvider.Value);
73+
74+
_mockConfiguration.Verify(c => c.Reload());
75+
}
76+
5077
[Fact]
5178
public async Task Specialize_ReloadsEnvironmentVariables()
5279
{
@@ -57,7 +84,9 @@ public async Task Specialize_ReloadsEnvironmentVariables()
5784
await Task.Yield();
5885
});
5986
_testEnvironment.SetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeSettingName, LanguageWorkerConstants.JavaLanguageWorkerName);
60-
var manager = new StandbyManager(_mockHostManager.Object, _mockLanguageWorkerChannelManager.Object, _mockConfiguration.Object, _mockWebHostEnvironment.Object, _testEnvironment, _mockOptionsMonitor.Object, NullLogger<StandbyManager>.Instance);
87+
88+
var hostNameProvider = new HostNameProvider(_testEnvironment, _testLoggerFactory.CreateLogger<HostNameProvider>());
89+
var manager = new StandbyManager(_mockHostManager.Object, _mockLanguageWorkerChannelManager.Object, _mockConfiguration.Object, _mockWebHostEnvironment.Object, _testEnvironment, _mockOptionsMonitor.Object, NullLogger<StandbyManager>.Instance, hostNameProvider);
6190
await manager.SpecializeHostAsync();
6291
Assert.Equal(_testSettingValue, _testEnvironment.GetEnvironmentVariable(_testSettingName));
6392
}

test/WebJobs.Script.Tests/WebJobsScriptHostServiceTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ public void SpecializeHost()
216216
var mockEnvironment = new Mock<IEnvironment>();
217217
Mock<ILanguageWorkerChannelManager> mockLanguageWorkerChannelManager = new Mock<ILanguageWorkerChannelManager>();
218218
ILogger<StandbyManager> testLogger = new Logger<StandbyManager>(_loggerFactory);
219-
var manager = new StandbyManager(_hostService, mockLanguageWorkerChannelManager.Object, mockConfiguration.Object, mockScriptWebHostEnvironment.Object, mockEnvironment.Object, _monitor, testLogger);
219+
var loggerProvider = new TestLoggerProvider();
220+
var loggerFactory = new LoggerFactory();
221+
loggerFactory.AddProvider(loggerProvider);
222+
var hostNameProvider = new HostNameProvider(mockEnvironment.Object, loggerFactory.CreateLogger<HostNameProvider>());
223+
var manager = new StandbyManager(_hostService, mockLanguageWorkerChannelManager.Object, mockConfiguration.Object, mockScriptWebHostEnvironment.Object, mockEnvironment.Object, _monitor, testLogger, hostNameProvider);
220224
manager.SpecializeHostAsync().Wait();
221225
}
222226
}

0 commit comments

Comments
 (0)