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);
        }