private DiscoveryResult DiscoverTestsFromSingleDiscoverer( LazyExtension <ITestDiscoverer, ITestDiscovererCapabilities> discoverer, IEnumerable <string> sources, DiscoveryContext context, TestCaseDiscoverySink discoverySink, IMessageLogger logger, CancellationToken cancellationToken) { var result = new DiscoveryResult(); if (DiscovererEnumerator.TryToLoadDiscoverer(discoverer, logger, out var discovererType) == false) { // Fail to instantiate the discoverer type. return(result); } // on instantiated successfully, get tests try { EqtTrace.Verbose( "DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Loading tests for {0}", discoverer.Value.GetType().FullName); var currentTotalTests = this.discoveryResultCache.TotalDiscoveredTests; var newTimeStart = DateTime.UtcNow; this.testPlatformEventSource.AdapterDiscoveryStart(discoverer.Metadata.DefaultExecutorUri.AbsoluteUri); foreach (var testSource in sources) { if (cancellationToken.IsCancellationRequested) { EqtTrace.Info("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Cancellation Requested. Aborting the discovery"); break; } discoverer.Value.DiscoverTests(new[] { testSource }, context, logger, discoverySink); } var totalAdapterRunTime = DateTime.UtcNow - newTimeStart; this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests); // Record Total Tests Discovered By each Discoverer. var totalTestsDiscoveredByCurrentDiscoverer = this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests; this.requestData.MetricsCollection.Add( string.Format("{0}.{1}", TelemetryDataConstants.TotalTestsByAdapter, discoverer.Metadata.DefaultExecutorUri), totalTestsDiscoveredByCurrentDiscoverer); result.TotalAdaptersUsed++; EqtTrace.Verbose("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Done loading tests for {0}", discoverer.Value.GetType().FullName); var discovererFromDeprecatedLocations = DiscovererEnumerator.IsDiscovererFromDeprecatedLocations(discoverer); if (discovererFromDeprecatedLocations) { logger.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, CrossPlatEngineResources.DeprecatedAdapterPath)); } // Collecting Data Point for Time Taken to Discover Tests by each Adapter this.requestData.MetricsCollection.Add($"{TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter}.{discoverer.Metadata.DefaultExecutorUri}", totalAdapterRunTime.TotalSeconds); result.TotalTimeSpentInAdapaters += totalAdapterRunTime.TotalSeconds; } catch (Exception e) { var message = string.Format(CultureInfo.CurrentUICulture, CrossPlatEngineResources.ExceptionFromLoadTests, discovererType.Name, e.Message); logger.SendMessage(TestMessageLevel.Error, message); EqtTrace.Error("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: {0} ", e); } return(result); }
private void DiscoverTestsFromSingleDiscoverer( LazyExtension <ITestDiscoverer, ITestDiscovererCapabilities> discoverer, Dictionary <LazyExtension <ITestDiscoverer, ITestDiscovererCapabilities>, IEnumerable <string> > discovererToSourcesMap, DiscoveryContext context, TestCaseDiscoverySink discoverySink, IMessageLogger logger, ref double totalAdaptersUsed, ref double totalTimeTakenByAdapters) { if (DiscovererEnumerator.TryToLoadDiscoverer(discoverer, logger, out var discovererType) == false) { // Fail to instantiate the discoverer type. return; } // on instantiated successfully, get tests try { EqtTrace.Verbose( "DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Loading tests for {0}", discoverer.Value.GetType().FullName); if (discoverer.Metadata.DefaultExecutorUri == null) { throw new Exception($@"DefaultExecutorUri is null, did you decorate the discoverer class with [DefaultExecutorUri()] attribute? For example [DefaultExecutorUri(""executor://example.testadapter"")]."); } var currentTotalTests = this.discoveryResultCache.TotalDiscoveredTests; var newTimeStart = DateTime.UtcNow; this.testPlatformEventSource.AdapterDiscoveryStart(discoverer.Metadata.DefaultExecutorUri.AbsoluteUri); discoverer.Value.DiscoverTests(discovererToSourcesMap[discoverer], context, logger, discoverySink); var totalAdapterRunTime = DateTime.UtcNow - newTimeStart; this.testPlatformEventSource.AdapterDiscoveryStop(this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests); // Record Total Tests Discovered By each Discoverer. var totalTestsDiscoveredByCurrentDiscoverer = this.discoveryResultCache.TotalDiscoveredTests - currentTotalTests; this.requestData.MetricsCollection.Add( string.Format("{0}.{1}", TelemetryDataConstants.TotalTestsByAdapter, discoverer.Metadata.DefaultExecutorUri), totalTestsDiscoveredByCurrentDiscoverer); totalAdaptersUsed++; EqtTrace.Verbose("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: Done loading tests for {0}", discoverer.Value.GetType().FullName); var discovererFromDeprecatedLocations = DiscovererEnumerator.IsDiscovererFromDeprecatedLocations(discoverer); if (discovererFromDeprecatedLocations) { logger.SendMessage(TestMessageLevel.Warning, string.Format(CultureInfo.CurrentCulture, CrossPlatEngineResources.DeprecatedAdapterPath)); } // Collecting Data Point for Time Taken to Discover Tests by each Adapter this.requestData.MetricsCollection.Add( string.Format("{0}.{1}", TelemetryDataConstants.TimeTakenToDiscoverTestsByAnAdapter, discoverer.Metadata.DefaultExecutorUri), totalAdapterRunTime.TotalSeconds); totalTimeTakenByAdapters += totalAdapterRunTime.TotalSeconds; } catch (Exception e) { var message = string.Format( CultureInfo.CurrentUICulture, CrossPlatEngineResources.ExceptionFromLoadTests, discovererType.Name, e.Message); logger.SendMessage(TestMessageLevel.Error, message); EqtTrace.Error("DiscovererEnumerator.DiscoverTestsFromSingleDiscoverer: {0} ", e); } }