Skip to content

Commit 8a338dd

Browse files
authored
Adding test for IsRunning logic to return fast (#764)
1 parent ca785e6 commit 8a338dd

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/WebJobs.Script.WebHost/Handlers/WebScriptHostHandler.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,17 @@ namespace Microsoft.Azure.WebJobs.Script.WebHost.Handlers
1414
public class WebScriptHostHandler : DelegatingHandler
1515
{
1616
private readonly TimeSpan _hostTimeoutSeconds;
17-
private readonly int _hostRunningPollIntervalMs = 500;
17+
private readonly int _hostRunningPollIntervalMs;
1818
private readonly HttpConfiguration _config;
1919

20-
public WebScriptHostHandler(HttpConfiguration config, int hostTimeoutSeconds = 30)
20+
public WebScriptHostHandler(HttpConfiguration config, int hostTimeoutSeconds = 30, int hostRunningPollIntervalMS = 500)
2121
{
2222
if (config == null)
2323
{
2424
throw new ArgumentNullException("config");
2525
}
2626

27+
_hostRunningPollIntervalMs = hostRunningPollIntervalMS;
2728
_hostTimeoutSeconds = new TimeSpan(0, 0, hostTimeoutSeconds);
2829
_config = config;
2930
}

src/WebJobs.Script/Host/ScriptHostManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public virtual ScriptHost Instance
6363
/// <summary>
6464
/// Gets the last host <see cref="Exception"/> that has occurred.
6565
/// </summary>
66-
public Exception LastError { get; private set; }
66+
public virtual Exception LastError { get; private set; }
6767

6868
public void RunAndBlock(CancellationToken cancellationToken = default(CancellationToken))
6969
{

test/WebJobs.Script.Tests/WebScriptHostHandlerTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public WebScriptHostHandlerTests()
3030

3131
HttpConfiguration config = new HttpConfiguration();
3232
config.DependencyResolver = mockResolver.Object;
33-
WebScriptHostHandler handler = new WebScriptHostHandler(config, hostTimeoutSeconds: 1)
33+
WebScriptHostHandler handler = new WebScriptHostHandler(config, hostTimeoutSeconds: 1, hostRunningPollIntervalMS: 50)
3434
{
3535
InnerHandler = new TestHandler()
3636
};
@@ -41,6 +41,7 @@ public WebScriptHostHandlerTests()
4141
public async Task SendAsync_HostNotRunning_Returns503()
4242
{
4343
_managerMock.SetupGet(p => p.IsRunning).Returns(false);
44+
_managerMock.SetupGet(p => p.LastError).Returns((Exception)null);
4445

4546
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://functions.test.com/api/test");
4647
HttpResponseMessage response = await _invoker.SendAsync(request, CancellationToken.None);
@@ -57,6 +58,18 @@ public async Task SendAsync_HostRunning_ReturnsOk()
5758
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
5859
}
5960

61+
[Fact]
62+
public async Task SendAsync_HostInErrorState_Returns503Immediately()
63+
{
64+
_managerMock.SetupGet(p => p.IsRunning).Returns(false);
65+
_managerMock.SetupGet(p => p.LastError).Returns(new Exception());
66+
67+
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://functions.test.com/api/test");
68+
HttpResponseMessage response = await _invoker.SendAsync(request, CancellationToken.None);
69+
Assert.Equal(HttpStatusCode.ServiceUnavailable, response.StatusCode);
70+
_managerMock.VerifyGet(P => P.IsRunning, Times.Exactly(2));
71+
}
72+
6073
public class TestHandler : DelegatingHandler
6174
{
6275
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

0 commit comments

Comments
 (0)