public async Task InitializeAsync() { // start host via CLI if testing locally if (Constants.FunctionsHostUrl.Contains("localhost")) { // kill existing func processes _logger.LogInformation("Shutting down any running functions hosts.."); FixtureHelpers.KillExistingFuncHosts(); // start functions process _logger.LogInformation($"Starting functions host for {Constants.FunctionAppCollectionName}..."); _funcProcess = FixtureHelpers.GetFuncHostProcess(); string workingDir = _funcProcess.StartInfo.WorkingDirectory; _logger.LogInformation($" Working dir: '${workingDir}' Exists: '{Directory.Exists(workingDir)}'"); string fileName = _funcProcess.StartInfo.FileName; _logger.LogInformation($" File name: '${fileName}' Exists: '{File.Exists(fileName)}'"); await CosmosDBHelpers.CreateDocumentCollections(); FixtureHelpers.StartProcessWithLogging(_funcProcess, _logger); await TestUtility.RetryAsync(() => { return(Task.FromResult(TestLogs.CoreToolsLogs.Any(p => p.Contains("Host lock lease acquired by instance ID")))); }); } }
public async Task CosmosDBTriggerAndOutput_Succeeds() { string expectedDocId = Guid.NewGuid().ToString(); try { //Trigger await CosmosDBHelpers.CreateDocument(expectedDocId); //Read var documentId = await CosmosDBHelpers.ReadDocument(expectedDocId); Assert.Equal(expectedDocId, documentId); } finally { //Clean up await CosmosDBHelpers.DeleteTestDocuments(expectedDocId); } }
public async Task InitializeAsync() { // start host via CLI if testing locally if (Constants.FunctionsHostUrl.Contains("localhost")) { // kill existing func processes _logger.LogInformation("Shutting down any running functions hosts.."); FixtureHelpers.KillExistingFuncHosts(); // start functions process _logger.LogInformation($"Starting functions host for {Constants.FunctionAppCollectionName}..."); _funcProcess = FixtureHelpers.GetFuncHostProcess(); string workingDir = _funcProcess.StartInfo.WorkingDirectory; _logger.LogInformation($" Working dir: '${workingDir}' Exists: '{Directory.Exists(workingDir)}'"); string fileName = _funcProcess.StartInfo.FileName; _logger.LogInformation($" File name: '${fileName}' Exists: '{File.Exists(fileName)}'"); if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // Currently only HTTP is supported in Linux CI. _funcProcess.StartInfo.ArgumentList.Add("--functions"); _funcProcess.StartInfo.ArgumentList.Add("HelloFromQuery"); _funcProcess.StartInfo.ArgumentList.Add("HelloFromJsonBody"); _funcProcess.StartInfo.ArgumentList.Add("HelloUsingPoco"); _funcProcess.StartInfo.ArgumentList.Add("ExceptionFunction"); } await CosmosDBHelpers.TryCreateDocumentCollectionsAsync(_logger); FixtureHelpers.StartProcessWithLogging(_funcProcess, _logger); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // ensure child processes are cleaned up _jobObjectRegistry = new JobObjectRegistry(); _jobObjectRegistry.Register(_funcProcess); } var httpClient = new HttpClient(); _logger.LogInformation("Waiting for host to be running..."); await TestUtility.RetryAsync(async() => { try { var response = await httpClient.GetAsync($"{Constants.FunctionsHostUrl}/admin/host/status"); var content = await response.Content.ReadAsStringAsync(); var doc = JsonDocument.Parse(content); if (doc.RootElement.TryGetProperty("state", out JsonElement value) && value.GetString() == "Running") { _logger.LogInformation($" Current state: Running"); return(true); } _logger.LogInformation($" Current state: {value}"); return(false); } catch { // Can get exceptions before host is running. _logger.LogInformation($" Current state: process starting"); return(false); } }, userMessageCallback : () => string.Join(System.Environment.NewLine, TestLogs.CoreToolsLogs)); } }