Skip to content

Commit 611b5a5

Browse files
author
Hanzhang Zeng (Roger)
committed
Add unit test for GetAdminToken endpoint
1 parent 3502311 commit 611b5a5

File tree

3 files changed

+61
-31
lines changed

3 files changed

+61
-31
lines changed

src/WebJobs.Script.WebHost/Controllers/HostController.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Microsoft.Azure.WebJobs.Script.WebHost.Filters;
2020
using Microsoft.Azure.WebJobs.Script.WebHost.Management;
2121
using Microsoft.Azure.WebJobs.Script.WebHost.Models;
22+
using Microsoft.Azure.WebJobs.Script.WebHost.Security;
2223
using Microsoft.Azure.WebJobs.Script.WebHost.Security.Authorization;
2324
using Microsoft.Azure.WebJobs.Script.WebHost.Security.Authorization.Policies;
2425
using Microsoft.Extensions.Logging;
@@ -229,6 +230,28 @@ public async Task<IActionResult> SetState([FromBody] string state)
229230
return Accepted();
230231
}
231232

233+
/// <summary>
234+
/// This endpoint generates a temporary x-ms-site-restricted-token for core tool
235+
/// to access KuduLite zipdeploy endpoint in Linux Consumption
236+
/// </summary>
237+
/// <returns>
238+
/// 200 on token generated
239+
/// 400 on non-Linux container environment
240+
/// </returns>
241+
[HttpGet]
242+
[Route("admin/host/token")]
243+
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
244+
public IActionResult GetAdminToken()
245+
{
246+
if (!_environment.IsLinuxContainerEnvironment())
247+
{
248+
return BadRequest("Endpoint is only available when running in Linux Container");
249+
}
250+
251+
string requestHeaderToken = SimpleWebTokenHelper.CreateToken(DateTime.UtcNow.AddHours(2));
252+
return Ok(requestHeaderToken);
253+
}
254+
232255
[AcceptVerbs("GET", "POST", "DELETE")]
233256
[Authorize(AuthenticationSchemes = AuthLevelAuthenticationDefaults.AuthenticationScheme)]
234257
[Route("runtime/webhooks/{name}/{*extra}")]

src/WebJobs.Script.WebHost/Controllers/InstanceController.cs

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

4-
using System;
54
using System.Threading.Tasks;
65
using Microsoft.AspNetCore.Authorization;
76
using Microsoft.AspNetCore.Http;
87
using Microsoft.AspNetCore.Mvc;
98
using Microsoft.Azure.WebJobs.Script.WebHost.Management;
109
using Microsoft.Azure.WebJobs.Script.WebHost.Models;
11-
using Microsoft.Azure.WebJobs.Script.WebHost.Security;
1210
using Microsoft.Azure.WebJobs.Script.WebHost.Security.Authorization.Policies;
1311

1412
namespace Microsoft.Azure.WebJobs.Script.WebHost.Controllers
@@ -67,34 +65,5 @@ public IActionResult GetInstanceInfo()
6765
{
6866
return Ok(_instanceManager.GetInstanceInfo());
6967
}
70-
71-
/// <summary>
72-
/// This endpoint generates a temporary x-ms-site-restricted-token for core tool
73-
/// to access KuduLite zipdeploy endpoint in Linux Consumption
74-
/// </summary>
75-
/// <returns>
76-
/// 200 on token generated
77-
/// 400 on non-Linux container environment
78-
/// 404 on WEBSITE_AUTH_ENCRYPTION_KEY is not set
79-
/// </returns>
80-
[HttpGet]
81-
[Route("admin/getsitetoken")]
82-
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
83-
public IActionResult GetSiteToken()
84-
{
85-
if (!_environment.IsLinuxContainerEnvironment())
86-
{
87-
return BadRequest("Endpoint is only available when running in Linux Container");
88-
}
89-
90-
string websiteEncryptionKey = _environment.GetEnvironmentVariable(EnvironmentSettingNames.WebSiteAuthEncryptionKey);
91-
if (string.IsNullOrEmpty(websiteEncryptionKey))
92-
{
93-
return NotFound("WEBSITE_AUTH_ENCRYPTION_KEY is not set.");
94-
}
95-
96-
string requestHeaderToken = SimpleWebTokenHelper.CreateToken(DateTime.UtcNow.AddHours(2), websiteEncryptionKey.ToKeyBytes());
97-
return Ok(requestHeaderToken);
98-
}
9968
}
10069
}

test/WebJobs.Script.Tests/Controllers/Admin/HostControllerTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,5 +90,43 @@ public async Task SetState_Succeeds(string desiredState, ScriptHostState current
9090
Assert.False(fileExists);
9191
}
9292
}
93+
94+
[Fact]
95+
public void GetAdminToken_Succeeds()
96+
{
97+
// Arrange
98+
_mockEnvironment.Setup(p => p.GetEnvironmentVariable(It.Is<string>(k => k == EnvironmentSettingNames.ContainerName))).Returns<string>(v => v = "ContainerName");
99+
100+
var key = TestHelpers.GenerateKeyBytes();
101+
var stringKey = TestHelpers.GenerateKeyHexString(key);
102+
using (new TestScopedEnvironmentVariable(EnvironmentSettingNames.WebSiteAuthEncryptionKey, stringKey))
103+
{
104+
// Act
105+
ObjectResult result = (ObjectResult)_hostController.GetAdminToken();
106+
HttpStatusCode resultStatus = (HttpStatusCode)result.StatusCode;
107+
108+
// Assert
109+
Assert.Equal(HttpStatusCode.OK, resultStatus);
110+
}
111+
}
112+
113+
[Fact]
114+
public void GetAdminToken_Fails_NotLinuxContainer()
115+
{
116+
// Arrange
117+
_mockEnvironment.Setup(p => p.GetEnvironmentVariable(It.Is<string>(k => k == EnvironmentSettingNames.ContainerName))).Returns<string>(v => v = null);
118+
119+
var key = TestHelpers.GenerateKeyBytes();
120+
var stringKey = TestHelpers.GenerateKeyHexString(key);
121+
using (new TestScopedEnvironmentVariable(EnvironmentSettingNames.WebSiteAuthEncryptionKey, stringKey))
122+
{
123+
// Act
124+
ObjectResult result = (ObjectResult)_hostController.GetAdminToken();
125+
HttpStatusCode resultStatus = (HttpStatusCode)result.StatusCode;
126+
127+
// Assert
128+
Assert.Equal(HttpStatusCode.BadRequest, resultStatus);
129+
}
130+
}
93131
}
94132
}

0 commit comments

Comments
 (0)