public void DefaultWorkerProcessFactory_Returns_ExpectedProcess(WorkerContext workerContext) { Environment.SetEnvironmentVariable("TestEnv", "TestVal"); DefaultWorkerProcessFactory defaultWorkerProcessFactory = new DefaultWorkerProcessFactory(_testEnvironment, _loggerFactory); Process childProcess = defaultWorkerProcessFactory.CreateWorkerProcess(workerContext); var expectedEnvVars = workerContext.EnvironmentVariables; var actualEnvVars = childProcess.StartInfo.EnvironmentVariables; var parentProessEnvVars = Environment.GetEnvironmentVariables(); Assert.True(expectedEnvVars.Count + parentProessEnvVars.Count == actualEnvVars.Count); foreach (var envVar in expectedEnvVars) { Assert.Equal(expectedEnvVars[envVar.Key], actualEnvVars[envVar.Key]); } if (workerContext is RpcWorkerContext) { Assert.Equal(" httpvalue1 TestVal httpvalue2 --host localhost --port 80 --workerId testWorkerId --requestId testId --grpcMaxMessageLength 2147483647", childProcess.StartInfo.Arguments); } else { Assert.Equal(" httpvalue1 TestVal httpvalue2", childProcess.StartInfo.Arguments); } childProcess.Dispose(); Environment.SetEnvironmentVariable("TestEnv", string.Empty); }
public void DefaultWorkerProcessFactory_SanitizeExpandedArgs(string inputString, string expectedResult) { Environment.SetEnvironmentVariable("TestEnv", "TestVal"); DefaultWorkerProcessFactory defaultWorkerProcessFactory = new DefaultWorkerProcessFactory(_testEnvironment, _loggerFactory); var expandedArgs = Environment.ExpandEnvironmentVariables(inputString); var result = defaultWorkerProcessFactory.SanitizeExpandedArgument(expandedArgs); Assert.Equal(expectedResult, result); Environment.SetEnvironmentVariable("TestEnv", string.Empty); }
public void DefaultWorkerProcessFactory_ApplyWorkerConcurrencyLimits_WorksAsExpected(string runtime, string name, string value, string expectedValue) { DefaultWorkerProcessFactory defaultWorkerProcessFactory = new DefaultWorkerProcessFactory(_testEnvironment, _loggerFactory); Process process = defaultWorkerProcessFactory.CreateWorkerProcess(TestWorkerContexts.ToList()[1][0] as WorkerContext); process.StartInfo.EnvironmentVariables[RpcWorkerConstants.FunctionWorkerRuntimeSettingName] = runtime; if (!string.IsNullOrEmpty(value)) { process.StartInfo.EnvironmentVariables[name] = value; } defaultWorkerProcessFactory.ApplyWorkerConcurrencyLimits(process.StartInfo); Assert.Equal(process.StartInfo.EnvironmentVariables.GetValueOrNull(name), expectedValue); }
public void DefaultWorkerProcessFactory_Returns_ExpectedProcess(WorkerContext workerContext) { DefaultWorkerProcessFactory defaultWorkerProcessFactory = new DefaultWorkerProcessFactory(); Process childProcess = defaultWorkerProcessFactory.CreateWorkerProcess(workerContext); var expectedEnvVars = workerContext.EnvironmentVariables; var actualEnvVars = childProcess.StartInfo.EnvironmentVariables; var parentProessEnvVars = Environment.GetEnvironmentVariables(); Assert.True(expectedEnvVars.Count + parentProessEnvVars.Count == actualEnvVars.Count); foreach (var envVar in expectedEnvVars) { Assert.Equal(expectedEnvVars[envVar.Key], actualEnvVars[envVar.Key]); } childProcess.Dispose(); }
private async Task InitializeWorkersAsync() { var serverImpl = new FunctionRpcService(EventManager, _logger); var server = new GrpcServer(serverImpl, ScriptOptions.MaxMessageLengthBytes); using (_metricsLogger.LatencyEvent(MetricEventNames.HostStartupGrpcServerLatency)) { await server.StartAsync(); } var processFactory = new DefaultWorkerProcessFactory(); try { _processRegistry = ProcessRegistryFactory.Create(); } catch (Exception e) { _logger.LogWarning(e, "Unable to create process registry"); } CreateChannel channelFactory = (languageWorkerConfig, registrations, attemptCount) => { return(new LanguageWorkerChannel( ScriptOptions, EventManager, processFactory, _processRegistry, registrations, languageWorkerConfig, server.Uri, _loggerFactory, // TODO: DI (FACAVAL) Pass appropriate logger. Channel facory should likely be a service. _metricsLogger, attemptCount)); }; _functionDispatcher = new FunctionDispatcher(EventManager, server, channelFactory, _workerConfigs, _language); _eventSubscriptions.Add(EventManager.OfType <WorkerProcessErrorEvent>() .Subscribe(evt => { HandleHostError(evt.Exception); })); }
public void DefaultWorkerProcessFactory_InvalidWorkerContext_Throws(WorkerContext workerContext) { DefaultWorkerProcessFactory defaultWorkerProcessFactory = new DefaultWorkerProcessFactory(_testEnvironment, _loggerFactory); Assert.Throws <ArgumentNullException>(() => defaultWorkerProcessFactory.CreateWorkerProcess(workerContext)); }