protected ScriptHostEndToEndTestFixture(string rootPath, string testId, ProxyClientExecutor proxyClient = null, bool startHost = true, ICollection <string> functions = null, string functionsWorkerLanguage = null) { if (!string.IsNullOrEmpty(functionsWorkerLanguage)) { Environment.SetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeSettingName, functionsWorkerLanguage); } _settingsManager = ScriptSettingsManager.Instance; FixtureId = testId; string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.Storage); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); QueueClient = storageAccount.CreateCloudQueueClient(); BlobClient = storageAccount.CreateCloudBlobClient(); TableClient = storageAccount.CreateCloudTableClient(); CreateTestStorageEntities().Wait(); // ApiHubTestHelper.SetDefaultConnectionFactory(); ScriptHostConfiguration config = new ScriptHostConfiguration() { RootScriptPath = rootPath, FileLoggingMode = FileLoggingMode.Always, }; if (functions != null) { config.OnConfigurationApplied = c => c.Functions = functions; } RequestConfiguration = new HttpConfiguration(); EventManager = new ScriptEventManager(); ScriptHostEnvironmentMock = new Mock <IScriptHostEnvironment>(); LoggerProvider = new TestLoggerProvider(); ILoggerProviderFactory loggerProviderFactory = new TestLoggerProviderFactory(LoggerProvider); // Reset the timer logs first, since one of the tests will // be checking them TestHelpers.ClearFunctionLogs("TimerTrigger"); TestHelpers.ClearFunctionLogs("ListenerStartupException"); InitializeConfig(config); Func <string, FunctionDescriptor> funcLookup = (name) => this.Host.GetFunctionOrNull(name); var fastLogger = new FunctionInstanceLogger(funcLookup, new MetricsLogger()); config.HostConfig.AddService <IAsyncCollector <FunctionInstanceLogEntry> >(fastLogger); Host = new ScriptHost(ScriptHostEnvironmentMock.Object, EventManager, config, _settingsManager, proxyClient: proxyClient, loggerProviderFactory: loggerProviderFactory); Host.Initialize(); if (startHost) { Host.HostStarted += (s, e) => _hostStartedEvent.Set(); Host.Start(); _hostStartedEvent.Wait(TimeSpan.FromSeconds(30)); } }
private static (Collection <FunctionMetadata>, ProxyClientExecutor) LoadProxyMetadata(string proxiesJson, Dictionary <string, ICollection <string> > functionErrors, ILogger logger) { var proxies = new Collection <FunctionMetadata>(); ProxyClientExecutor client = null; var rawProxyClient = ProxyClientFactory.Create(proxiesJson, logger); if (rawProxyClient != null) { client = new ProxyClientExecutor(rawProxyClient); } if (client == null) { return(proxies, null); } var routes = client.GetProxyData(); foreach (var route in routes.Routes) { try { // Proxy names should follow the same naming restrictions as in function names. If not, invalid characters will be removed. var proxyName = NormalizeProxyName(route.Name); var proxyMetadata = new FunctionMetadata(); var json = new JObject { { "authLevel", "anonymous" }, { "name", "req" }, { "type", "httptrigger" }, { "direction", "in" }, { "Route", route.UrlTemplate.TrimStart('/') }, { "Methods", new JArray(route.Methods.Select(m => m.Method.ToString()).ToArray()) } }; BindingMetadata bindingMetadata = BindingMetadata.Create(json); proxyMetadata.Bindings.Add(bindingMetadata); proxyMetadata.Name = proxyName; proxyMetadata.IsProxy = true; proxies.Add(proxyMetadata); } catch (Exception ex) { // log any unhandled exceptions and continue Utility.AddFunctionError(functionErrors, route.Name, Utility.FlattenException(ex, includeSource: false), isFunctionShortName: true); } } return(proxies, client); }
protected ScriptHostEndToEndTestFixture(string rootPath, string testId, string functionsWorkerLanguage, ProxyClientExecutor proxyClient = null, bool startHost = true, ICollection <string> functions = null) { _settingsManager = ScriptSettingsManager.Instance; FixtureId = testId; RequestConfiguration = new HttpConfiguration(); EventManager = new ScriptEventManager(); MockApplicationLifetime = new Mock <IApplicationLifetime>(); LoggerProvider = new TestLoggerProvider(); _rootPath = rootPath; _proxyClient = proxyClient; _startHost = startHost; _functions = functions; _functionsWorkerLanguage = functionsWorkerLanguage; }
public ProxyFunctionDescriptorProviderTests() { string rootPath = Path.Combine(Environment.CurrentDirectory, @"TestScripts\Proxies"); _config = new ScriptHostConfiguration { RootScriptPath = rootPath }; var environment = new Mock <IScriptHostEnvironment>(); var eventManager = new Mock <IScriptEventManager>(); _proxyClient = GetMockProxyClient(); _settingsManager = ScriptSettingsManager.Instance; _host = ScriptHost.Create(environment.Object, eventManager.Object, _config, _settingsManager, _proxyClient); _metadataCollection = _host.ReadProxyMetadata(_config, _settingsManager); }
protected EndToEndTestFixture(string rootPath, string testId, ProxyClientExecutor proxyClient = null) { _settingsManager = ScriptSettingsManager.Instance; FixtureId = testId; string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.Storage); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); QueueClient = storageAccount.CreateCloudQueueClient(); BlobClient = storageAccount.CreateCloudBlobClient(); TableClient = storageAccount.CreateCloudTableClient(); CreateTestStorageEntities(); TraceWriter = new TestTraceWriter(TraceLevel.Verbose); ApiHubTestHelper.SetDefaultConnectionFactory(); ScriptHostConfiguration config = new ScriptHostConfiguration() { RootScriptPath = rootPath, TraceWriter = TraceWriter, FileLoggingMode = FileLoggingMode.Always }; RequestConfiguration = new HttpConfiguration(); RequestConfiguration.Formatters.Add(new PlaintextMediaTypeFormatter()); EventManager = new ScriptEventManager(); ScriptHostEnvironmentMock = new Mock <IScriptHostEnvironment>(); // Reset the timer logs first, since one of the tests will // be checking them TestHelpers.ClearFunctionLogs("TimerTrigger"); TestHelpers.ClearFunctionLogs("ListenerStartupException"); InitializeConfig(config); Func <string, FunctionDescriptor> funcLookup = (name) => this.Host.GetFunctionOrNull(name); var fastLogger = new FunctionInstanceLogger(funcLookup, new MetricsLogger()); config.HostConfig.AddService <IAsyncCollector <FunctionInstanceLogEntry> >(fastLogger); Host = ScriptHost.Create(ScriptHostEnvironmentMock.Object, EventManager, config, _settingsManager, proxyClient); Host.Start(); }
public ProxyFunctionDescriptorProviderTests() { string rootPath = Path.Combine(Environment.CurrentDirectory, @"TestScripts\Proxies"); var hostOptions = new JobHostOptions(); var eventManager = new Mock <IScriptEventManager>(); var contextFactory = new Mock <IJobHostContextFactory>(); _proxyClient = GetMockProxyClient(); _settingsManager = ScriptSettingsManager.Instance; _host = new HostBuilder() .ConfigureDefaultTestWebScriptHost(o => { o.ScriptPath = rootPath; o.LogPath = TestHelpers.GetHostLogFileDirectory().Parent.FullName; }) .Build(); _scriptHost = _host.GetScriptHost(); }
public ProxyFunctionMetadata(ProxyClientExecutor proxyClient) { ProxyClient = proxyClient; this.SetIsCodeless(true); }
public ProxyMetadataInfo(ImmutableArray <FunctionMetadata> functions, ImmutableDictionary <string, ImmutableArray <string> > errors, ProxyClientExecutor client) { Functions = functions; Errors = errors; ProxyClient = client; }