public async Task Assigns_Context_From_CONTAINER_START_CONTEXT() { var containerEncryptionKey = TestHelpers.GenerateKeyHexString(); var hostAssignmentContext = GetHostAssignmentContext(); var secrets = new FunctionAppSecrets(); secrets.Host = new FunctionAppSecrets.HostSecrets { Master = "test-key", Function = new Dictionary <string, string> { { "host-function-key-1", "test-key" } }, System = new Dictionary <string, string> { { "host-system-key-1", "test-key" } } }; hostAssignmentContext.Secrets = secrets; hostAssignmentContext.MSIContext = new MSIContext(); var encryptedHostAssignmentContext = GetEncryptedHostAssignmentContext(hostAssignmentContext, containerEncryptionKey); var serializedContext = JsonConvert.SerializeObject(new { encryptedContext = encryptedHostAssignmentContext }); _environment.SetEnvironmentVariable(ContainerStartContext, serializedContext); _environment.SetEnvironmentVariable(ContainerEncryptionKey, containerEncryptionKey); AddLinuxConsumptionSettings(_environment); _instanceManagerMock.Setup(m => m.SpecializeMSISidecar(It.Is <HostAssignmentContext>(context => hostAssignmentContext.Equals(context) && !context.IsWarmupRequest))).Returns(Task.FromResult(string.Empty)); _instanceManagerMock.Setup(manager => manager.StartAssignment(It.Is <HostAssignmentContext>(context => hostAssignmentContext.Equals(context) && !context.IsWarmupRequest))).Returns(true); var initializationHostService = new LinuxContainerInitializationHostService(_environment, _instanceManagerMock.Object, NullLogger <LinuxContainerInitializationHostService> .Instance, _startupContextProvider); await initializationHostService.StartAsync(CancellationToken.None); _instanceManagerMock.Verify(m => m.SpecializeMSISidecar(It.Is <HostAssignmentContext>(context => hostAssignmentContext.Equals(context) && !context.IsWarmupRequest)), Times.Once); _instanceManagerMock.Verify(manager => manager.StartAssignment(It.Is <HostAssignmentContext>(context => hostAssignmentContext.Equals(context) && !context.IsWarmupRequest)), Times.Once); var hostSecrets = _startupContextProvider.GetHostSecretsOrNull(); Assert.Equal("test-key", hostSecrets.MasterKey); }
public async Task GetHostSecretsOrNull_ReturnsExpectedSecrets() { var path = WriteStartupContext(); var secrets = _startupContextProvider.GetHostSecretsOrNull(); Assert.Equal(_secrets.Host.Master, secrets.MasterKey); Assert.Equal(_secrets.Host.Function, secrets.FunctionKeys); Assert.Equal(_secrets.Host.System, secrets.SystemKeys); var logs = _loggerProvider.GetAllLogMessages().Select(p => p.FormattedMessage).ToArray(); Assert.True(logs.Contains($"Loading startup context from {path}")); Assert.True(logs.Contains("Loaded host keys from startup context")); // verify the context file is deleted after it's consumed await TestHelpers.Await(() => { return(!File.Exists(path)); }, timeout : 1000); }