diff --git a/src/WebJobs.Script.WebHost/Controllers/KubernetesPodController.cs b/src/WebJobs.Script.WebHost/Controllers/KubernetesPodController.cs deleted file mode 100644 index 66b50441b9..0000000000 --- a/src/WebJobs.Script.WebHost/Controllers/KubernetesPodController.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Azure.WebJobs.Script.WebHost.Management; -using Microsoft.Azure.WebJobs.Script.WebHost.Models; -using Microsoft.Azure.WebJobs.Script.WebHost.Security.Authorization.Policies; -using Microsoft.Extensions.Logging; - -namespace Microsoft.Azure.WebJobs.Script.WebHost.Controllers -{ - public class KubernetesPodController : Controller - { - private readonly IEnvironment _environment; - private readonly IInstanceManager _instanceManager; - private readonly ILogger _logger; - private readonly StartupContextProvider _startupContextProvider; - - public KubernetesPodController(IEnvironment environment, IInstanceManager instanceManager, ILoggerFactory loggerFactory, StartupContextProvider startupContextProvider) - { - _environment = environment; - _instanceManager = instanceManager; - _logger = loggerFactory.CreateLogger(); - _startupContextProvider = startupContextProvider; - } - - [HttpPost] - [Route("admin/pod/assign")] - public async Task Assign([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext) - { - _logger.LogDebug($"Starting container assignment for host : {Request?.Host}"); - var assignmentContext = _startupContextProvider.SetContext(encryptedAssignmentContext); - - string error = await _instanceManager.ValidateContext(assignmentContext); - if (error != null) - { - return StatusCode(StatusCodes.Status400BadRequest, error); - } - - var succeeded = _instanceManager.StartAssignment(assignmentContext); - - return succeeded - ? Accepted() - : StatusCode(StatusCodes.Status409Conflict, "Instance already assigned"); - } - } -} diff --git a/test/WebJobs.Script.Tests.Integration/Management/KubernetesPodControllerTests.cs b/test/WebJobs.Script.Tests.Integration/Management/KubernetesPodControllerTests.cs deleted file mode 100644 index 7e359fed8d..0000000000 --- a/test/WebJobs.Script.Tests.Integration/Management/KubernetesPodControllerTests.cs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Azure.WebJobs.Script.WebHost; -using Microsoft.Azure.WebJobs.Script.WebHost.Controllers; -using Microsoft.Azure.WebJobs.Script.WebHost.Management; -using Microsoft.Azure.WebJobs.Script.WebHost.Management.LinuxSpecialization; -using Microsoft.Azure.WebJobs.Script.WebHost.Models; -using Microsoft.Azure.WebJobs.Script.WebHost.Security; -using Microsoft.Extensions.Logging; -using Microsoft.WebJobs.Script.Tests; -using Moq; -using Moq.Protected; -using Newtonsoft.Json; -using Xunit; - -namespace Microsoft.Azure.WebJobs.Script.Tests.Managment -{ - [Trait(TestTraits.Category, TestTraits.EndToEnd)] - [Trait(TestTraits.Group, TestTraits.ContainerInstanceTests)] - public class KubernetesPodControllerTests - { - private readonly TestOptionsFactory _optionsFactory = new TestOptionsFactory(new ScriptApplicationHostOptions()); - - [Fact] - public async Task Assignment_Succeeds_With_Encryption_Key() - { - var environment = new TestEnvironment(); - environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsitePlaceholderMode, "1"); - - var scriptWebEnvironment = new ScriptWebHostEnvironment(environment); - - var loggerFactory = new LoggerFactory(); - var loggerProvider = new TestLoggerProvider(); - loggerFactory.AddProvider(loggerProvider); - - var handlerMock = new Mock(MockBehavior.Strict); - - handlerMock.Protected().Setup>("SendAsync", - ItExpr.IsAny(), - ItExpr.IsAny()).ReturnsAsync(new HttpResponseMessage - { - StatusCode = HttpStatusCode.OK - }); - - var instanceManager = new AtlasInstanceManager(_optionsFactory, TestHelpers.CreateHttpClientFactory(handlerMock.Object), - scriptWebEnvironment, environment, loggerFactory.CreateLogger(), - new TestMetricsLogger(), null, new Mock().Object, - new Mock(MockBehavior.Strict).Object); - var startupContextProvider = new StartupContextProvider(environment, loggerFactory.CreateLogger()); - - instanceManager.Reset(); - - var podController = new KubernetesPodController(environment, instanceManager, loggerFactory, startupContextProvider); - - var hostAssignmentContext = new HostAssignmentContext - { - Environment = new Dictionary() - { - [EnvironmentSettingNames.AzureWebsiteRunFromPackage] = "http://localhost:1234" - } - }; - hostAssignmentContext.Secrets = new FunctionAppSecrets(); - hostAssignmentContext.IsWarmupRequest = false; - - var encryptedHostAssignmentValue = SimpleWebTokenHelper.Encrypt( - JsonConvert.SerializeObject(hostAssignmentContext), TestHelpers.EncryptionKey.ToKeyBytes()); - - var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext() - { - EncryptedContext = encryptedHostAssignmentValue - }; - - environment.SetEnvironmentVariable(EnvironmentSettingNames.PodEncryptionKey, TestHelpers.EncryptionKey); - environment.SetEnvironmentVariable(EnvironmentSettingNames.KubernetesServiceHost, "http://localhost:80"); - environment.SetEnvironmentVariable(EnvironmentSettingNames.PodNamespace, "k8se-apps"); - - var result = await podController.Assign(encryptedHostAssignmentContext); - Assert.NotNull(startupContextProvider.Context); - Assert.IsType(result); - } - - [Fact] - public async Task Assignment_Fails_Without_Encryption_Key() - { - var environment = new TestEnvironment(); - environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsitePlaceholderMode, "1"); - - var scriptWebEnvironment = new ScriptWebHostEnvironment(environment); - - var loggerFactory = new LoggerFactory(); - var loggerProvider = new TestLoggerProvider(); - loggerFactory.AddProvider(loggerProvider); - - var handlerMock = new Mock(MockBehavior.Strict); - - handlerMock.Protected().Setup>("SendAsync", - ItExpr.IsAny(), - ItExpr.IsAny()).ReturnsAsync(new HttpResponseMessage - { - StatusCode = HttpStatusCode.OK - }); - - var instanceManager = new AtlasInstanceManager(_optionsFactory, TestHelpers.CreateHttpClientFactory(handlerMock.Object), - scriptWebEnvironment, environment, loggerFactory.CreateLogger(), - new TestMetricsLogger(), null, new Mock().Object, - new Mock(MockBehavior.Strict).Object); - var startupContextProvider = new StartupContextProvider(environment, loggerFactory.CreateLogger()); - - instanceManager.Reset(); - - var podController = new KubernetesPodController(environment, instanceManager, loggerFactory, startupContextProvider); - - var hostAssignmentContext = new HostAssignmentContext - { - Environment = new Dictionary() - { - [EnvironmentSettingNames.AzureWebsiteRunFromPackage] = "http://localhost:1234" - } - }; - hostAssignmentContext.Secrets = new FunctionAppSecrets(); - hostAssignmentContext.IsWarmupRequest = false; - - var encryptedHostAssignmentValue = SimpleWebTokenHelper.Encrypt( - JsonConvert.SerializeObject(hostAssignmentContext), TestHelpers.EncryptionKey.ToKeyBytes()); - - var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext() - { - EncryptedContext = encryptedHostAssignmentValue - }; - - environment.SetEnvironmentVariable(EnvironmentSettingNames.KubernetesServiceHost, "http://localhost:80"); - environment.SetEnvironmentVariable(EnvironmentSettingNames.PodNamespace, "k8se-apps"); - - var ex = await Assert.ThrowsAsync(async () => - { - await (podController.Assign(encryptedHostAssignmentContext)); - }); - Assert.Null(startupContextProvider.Context); - } - } -}