Skip to content

Commit a1181bd

Browse files
authored
Fix proxy behavior. (#6204)
Fix proxy behavior.
1 parent 3090d8d commit a1181bd

File tree

5 files changed

+74
-1
lines changed

5 files changed

+74
-1
lines changed

sample/HttpWorker/proxies.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"proxies": {
3+
"proxyroute": {
4+
"matchCondition": {
5+
"methods": [
6+
"GET"
7+
],
8+
"route": "/something"
9+
},
10+
"responseOverrides": {
11+
"response.statusCode": "200",
12+
"response.headers.Content-Type": "text/plain",
13+
"response.body": "something"
14+
}
15+
}
16+
}
17+
}

sample/Node/proxies.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"proxies": {
3+
"proxyroute": {
4+
"matchCondition": {
5+
"methods": [
6+
"GET"
7+
],
8+
"route": "/something"
9+
},
10+
"responseOverrides": {
11+
"response.statusCode": "200",
12+
"response.headers.Content-Type": "text/plain",
13+
"response.body": "something"
14+
}
15+
}
16+
}
17+
}

src/WebJobs.Script/Description/Workers/WorkerFunctionDescriptorProvider.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ public WorkerFunctionDescriptorProvider(ScriptHost host, ScriptJobHostOptions co
3838
{
3939
throw new ArgumentNullException(nameof(functionMetadata));
4040
}
41+
42+
// If a function exists exists with a proxy, there is a chance this could get evaluated first before ProxyFunctionDescriptorProvider.
43+
if (functionMetadata.IsProxy())
44+
{
45+
return (false, null);
46+
}
47+
4148
return await base.TryCreate(functionMetadata);
4249
}
4350

test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/SamplesEndToEndTests_HttpWorker.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ public async Task HttpTrigger_HttpWorker_Get_Succeeds()
3434
await InvokeHttpTrigger("HttpTrigger");
3535
}
3636

37+
[Fact]
38+
public async Task ProxyGetSucceeds()
39+
{
40+
await InvokeProxy();
41+
}
42+
3743
private async Task InvokeHttpTrigger(string functionName)
3844
{
3945
string functionKey = await _fixture.Host.GetFunctionSecretAsync($"{functionName}");
@@ -49,6 +55,18 @@ private async Task InvokeHttpTrigger(string functionName)
4955
Assert.True(res["functionName"].ToString().StartsWith(functionName));
5056
}
5157

58+
private async Task InvokeProxy()
59+
{
60+
string uri = "something";
61+
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
62+
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
63+
64+
var response = await _fixture.Host.HttpClient.SendAsync(request);
65+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
66+
string responseContent = await response.Content.ReadAsStringAsync();
67+
Assert.Equal(responseContent, uri);
68+
}
69+
5270
public class TestFixture : EndToEndTestFixture
5371
{
5472
static TestFixture()

test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/SamplesEndToEndTests_Node.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,19 @@ public async Task HttpTrigger_Get_Succeeds()
255255
await SamplesTestHelpers.InvokeAndValidateHttpTrigger(_fixture, "HttpTrigger");
256256
}
257257

258+
[Fact]
259+
public async Task InvokeProxy_GetsResponse()
260+
{
261+
string uri = "something";
262+
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
263+
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
264+
265+
var response = await _fixture.Host.HttpClient.SendAsync(request);
266+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
267+
string responseContent = await response.Content.ReadAsStringAsync();
268+
Assert.Equal(responseContent, uri);
269+
}
270+
258271
[Fact]
259272
public async Task HttpTrigger_DuplicateQueryParams_Succeeds()
260273
{
@@ -480,7 +493,8 @@ public override void ConfigureScriptHost(IWebJobsBuilder webJobsBuilder)
480493
"HttpTrigger-CustomRoute-Get",
481494
"HttpTrigger-Disabled",
482495
"HttpTrigger-Identities",
483-
"ManualTrigger"
496+
"ManualTrigger",
497+
"proxyroute"
484498
};
485499
});
486500
}

0 commit comments

Comments
 (0)