private static async Task <ApplicationManager> CreateApplicationInternal() { int siteIndex; _availableSiteIndex.TryPop(out siteIndex); string applicationName = _sitePrefix + siteIndex; string operationName = "SitePool.CreateApplicationInternal " + applicationName; var pathResolver = new DefaultPathResolver(PathHelper.ServiceSitePath, PathHelper.SitesPath); var settingsResolver = new DefaultSettingsResolver(); var certificateResolver = new X509Certificate2Resolver(); var siteManager = GetSiteManager(pathResolver, settingsResolver, certificateResolver); Site site = siteManager.GetSite(applicationName); if (site != null) { TestTracer.Trace("{0} Site already exists at {1}. Reusing site", operationName, site.SiteUrl); var appManager = new ApplicationManager(siteManager, site, applicationName, settingsResolver) { SitePoolIndex = siteIndex }; // In site reuse mode, clean out the existing site so we start clean // Enumrate all w3wp processes and make sure to kill any process with an open handle to klr.host.dll foreach (var process in (await appManager.ProcessManager.GetProcessesAsync()).Where(p => p.Name.Equals("w3wp", StringComparison.OrdinalIgnoreCase))) { var extendedProcess = await appManager.ProcessManager.GetProcessAsync(process.Id); if (extendedProcess.OpenFileHandles.Any(h => h.IndexOf("klr.host.dll", StringComparison.OrdinalIgnoreCase) != -1)) { await appManager.ProcessManager.KillProcessAsync(extendedProcess.Id, throwOnError : false); } } await appManager.RepositoryManager.Delete(deleteWebRoot : true, ignoreErrors : true); // Make sure we start with the correct default file as some tests expect it WriteIndexHtml(appManager); TestTracer.Trace("{0} completed", operationName); return(appManager); } else { TestTracer.Trace("{0} Creating new site", operationName); site = await siteManager.CreateSiteAsync(applicationName); TestTracer.Trace("{0} Created new site at {1}", operationName, site.SiteUrl); return(new ApplicationManager(siteManager, site, applicationName, settingsResolver) { SitePoolIndex = siteIndex }); } }
private static ISiteManager GetSiteManager(DefaultPathResolver pathResolver, DefaultSettingsResolver settingsResolver, X509Certificate2Resolver certificateResolver) { return(new SiteManager(pathResolver, traceFailedRequests: true, logPath: PathHelper.TestResultsPath, settingsResolver: settingsResolver, certificateResolver: certificateResolver)); }