public void ReturnsExpectedConfig(string config, int configCount)
 {
     using (TempDirectory tempDir = new TempDirectory())
     {
         string fileName = Path.Combine(tempDir.Path, "settings.txt");
         File.WriteAllText(fileName, config);
         FunctionsHostingConfiguration conf = new FunctionsHostingConfiguration(_environment, _loggerFactory, fileName, DateTime.Now.AddMilliseconds(1), TimeSpan.FromMilliseconds(100));
         conf.GetValue("test"); // to run Parse
         Assert.True(conf.Config.Count == configCount);
     }
 }
 public void ParsesConfig()
 {
     using (TempDirectory tempDir = new TempDirectory())
     {
         string fileName = Path.Combine(tempDir.Path, "settings.txt");
         File.WriteAllText(fileName, "ENABLE_FEATUREX=1,A=B,TimeOut=123");
         FunctionsHostingConfiguration conf = new FunctionsHostingConfiguration(_environment, _loggerFactory, fileName, DateTime.Now.AddMilliseconds(1), TimeSpan.FromMilliseconds(100));
         conf.GetValue("test"); // to run Parse
         Assert.Equal(3, conf.Config.Count);
         Assert.Equal("1", conf.GetValue("ENABLE_FEATUREX"));
         Assert.Equal("B", conf.GetValue("A"));
         Assert.Equal("123", conf.GetValue("TimeOut"));
     }
 }
        public void FunctionsWorkerDynamicConcurrencyEnabled_ReturnsExpected(string config, string siteName, bool isEnabled)
        {
            TestEnvironment environment = new TestEnvironment();

            if (!string.IsNullOrEmpty(siteName))
            {
                environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName, siteName);
            }
            using (TempDirectory tempDir = new TempDirectory())
            {
                string fileName = Path.Combine(tempDir.Path, "settings.txt");
                File.WriteAllText(fileName, config);
                FunctionsHostingConfiguration conf = new FunctionsHostingConfiguration(environment, _loggerFactory, fileName, DateTime.Now.AddMilliseconds(1), TimeSpan.FromMilliseconds(100));
                conf.GetValue("test"); // to run Parse
                Assert.Equal(conf.FunctionsWorkerDynamicConcurrencyEnabled, isEnabled);
            }
        }
        public async Task FunctionsWorkerDynamicConcurrencyEnabled_UpdatesSettings()
        {
            using (TempDirectory tempDir = new TempDirectory())
            {
                string fileName = Path.Combine(tempDir.Path, "settings.txt");
                File.WriteAllText(fileName, $"key1=value1,{RpcWorkerConstants.FunctionsWorkerDynamicConcurrencyEnabled}=value2");

                FunctionsHostingConfiguration conf = new FunctionsHostingConfiguration(_environment, _loggerFactory, fileName, DateTime.Now.AddMilliseconds(100), TimeSpan.FromMilliseconds(100));
                Assert.False(conf.FunctionsWorkerDynamicConcurrencyEnabled);

                File.WriteAllText(fileName, $"key1=value1,{RpcWorkerConstants.FunctionsWorkerDynamicConcurrencyEnabled}=stamp");
                await Task.Delay(500);

                Assert.True(conf.FunctionsWorkerDynamicConcurrencyEnabled);

                File.WriteAllText(fileName, "key1=value1");
                await Task.Delay(500);

                Assert.False(conf.FunctionsWorkerDynamicConcurrencyEnabled);

                Assert.True(_loggerProvider.GetAllLogMessages().Where(x => x.FormattedMessage.StartsWith("Updaiting FunctionsHostingConfigurations")).Count() == 3);
            }
        }
        public void FunctionsWorkerDynamicConcurrencyEnabled_Throws_InvalidOperationException()
        {
            FunctionsHostingConfiguration conf = new FunctionsHostingConfiguration(_environment, _loggerFactory, Path.Combine("C:\\", "test.txt"), DateTime.Now.AddMilliseconds(1), TimeSpan.FromMinutes(5));

            Assert.Throws <InvalidOperationException>(() => conf.FunctionsWorkerDynamicConcurrencyEnabled);
        }