private void AddProxyProvider(IServiceCollection services, string rootPath) { var jobHostOptions = new ScriptJobHostOptions { RootLogPath = rootPath, RootScriptPath = rootPath }; var jobHostOptionsWrapped = new OptionsWrapper <ScriptJobHostOptions>(jobHostOptions); var nullLogger = new NullLoggerFactory(); var proxyMetadataProvider = new ProxyFunctionProvider(jobHostOptionsWrapped, new Mock <IEnvironment>().Object, new Mock <IScriptEventManager>().Object, nullLogger); var functionMetadataManager = TestFunctionMetadataManager.GetFunctionMetadataManager(jobHostOptionsWrapped, new Mock <IFunctionMetadataProvider>().Object, new List <IFunctionProvider>() { proxyMetadataProvider }, new OptionsWrapper <HttpWorkerOptions>(new HttpWorkerOptions()), nullLogger, new OptionsWrapper <LanguageWorkerOptions>(TestHelpers.GetTestLanguageWorkerOptions())); services.AddSingleton <IFunctionMetadataManager>(functionMetadataManager); }
public async Task ProxyMetadata_WhenProxyFileChanges_IsRefreshed() { using (var tempDirectory = new TempDirectory()) { var testProxiesPath = Path.Combine(Environment.CurrentDirectory, @"TestScripts\Proxies"); var options = new OptionsWrapper <ScriptJobHostOptions>(new ScriptJobHostOptions { RootScriptPath = tempDirectory.Path }); var environment = new TestEnvironment(); var eventManager = new ScriptEventManager(); var provider = new ProxyFunctionProvider(options, environment, eventManager, NullLoggerFactory.Instance); // Get metadata before proxies exist ImmutableArray <FunctionMetadata> proxyMetadata1 = await provider.GetFunctionMetadataAsync(); ImmutableArray <FunctionMetadata> proxyMetadata2 = await provider.GetFunctionMetadataAsync(); Assert.True(proxyMetadata2.IsDefaultOrEmpty); Assert.True(proxyMetadata1.IsDefaultOrEmpty); // Update our proxies definition FileUtility.CopyDirectory(testProxiesPath, tempDirectory.Path); // Simulate a file change notification eventManager.Publish(new FileEvent(EventSources.ScriptFiles, new FileSystemEventArgs(WatcherChangeTypes.Changed, tempDirectory.Path, ScriptConstants.ProxyMetadataFileName))); ImmutableArray <FunctionMetadata> proxyMetadata3 = await provider.GetFunctionMetadataAsync(); var proxyClient = (proxyMetadata3.FirstOrDefault() as ProxyFunctionMetadata).ProxyClient; Assert.True(proxyMetadata3.Select(p => (p as ProxyFunctionMetadata).ProxyClient).All(c => c.Equals(proxyClient))); Assert.Equal(20, proxyMetadata3.Length); } }