From 8414c19c8b696056e12f59571f07ad05f18bdf6d Mon Sep 17 00:00:00 2001 From: Abhishek Kumawat Date: Tue, 26 Feb 2019 14:49:31 +0530 Subject: [PATCH 1/3] Passing test sources parameter to data collectors --- ...llector-Extensibility-Sources-Parameter.md | 66 +++++++++++++++++++ docs/extensions/datacollector.md | 3 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md diff --git a/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md new file mode 100644 index 00000000..cda0c01a --- /dev/null +++ b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md @@ -0,0 +1,66 @@ +DataCollector Extensibility - Adding testSources parameter + +## Summary +Exposing testSources parameter to datacollector extensions. List of test sources can be used by datacollectors for processing before test run start. + +## Motivation +Data collectors initialzation might need test sources list. Example: Static code coverage data collector needs to instrument the test sources before test run start. + +## Using testSources parameter in DataCollector + +Refer [datacollector](https://github.com/Microsoft/vstest/tree/master/test/TestAssets/OutOfProcDataCollector) doc for more details on how to write a datacollector. +To use testSources parameter in DataCollector: + +```csharp +using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; + +[DataCollectorFriendlyName("NewDataCollector")] +[DataCollectorTypeUri("my://new/datacollector")] +public class NewDataCollector : DataCollector +{ + private string logFileName; + private IEnumerable testSources; + private DataCollectionEnvironmentContext context; + + public override void Initialize( + System.Xml.XmlElement configurationElement, + DataCollectionEvents events, + DataCollectionSink dataSink, + DataCollectionLogger logger, + DataCollectionEnvironmentContext environmentContext) + { + events.SessionStart += this.SessionStarted_Handler; + events.TestCaseStart += this.Events_TestCaseStart; + this.logFileName = configurationElement["LogFileName"]; + this.context = environmentContext; + } + + public override void Initialize( + System.Xml.XmlElement configurationElement, + IEnumerable testSources, + DataCollectionEvents events, + DataCollectionSink dataSink, + DataCollectionLogger logger, + DataCollectionEnvironmentContext environmentContext) + { + this.testSources = testSources; + base.Initialize(configurationElement, events, dataSink, logger, environmentContext); + } + + private void SessionStarted_Handler(object sender, SessionStartEventArgs args) + { + var filename = Path.Combine(AppContext.BaseDirectory, logFileName); + File.WriteAllText(filename, "SessionStarted"); + this.dataCollectionSink.SendFileAsync(this.context.SessionDataCollectionContext, filename, true); + this.logger.LogWarning(this.context.SessionDataCollectionContext, "SessionStarted"); + } + + + private void Events_TestCaseStart(object sender, TestCaseStartEventArgs e) + { + this.logger.LogWarning(this.context.SessionDataCollectionContext, "TestCaseStarted " + e.TestCaseName); + } +} +``` +DataCollector exposes a `Initialize(System.Xml.XmlElement configurationElement, IEnumerable testSources, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` in addition to existing `Initialize(System.Xml.XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` to expose testSources list to DataCollector. +testSources parameter is a IEnumerable of test source file path. \ No newline at end of file diff --git a/docs/extensions/datacollector.md b/docs/extensions/datacollector.md index 599aba44..cffca2c2 100644 --- a/docs/extensions/datacollector.md +++ b/docs/extensions/datacollector.md @@ -37,7 +37,8 @@ public class NewDataCollector : DataCollector { events.SessionStart += this.SessionStarted_Handler; events.TestCaseStart += this.Events_TestCaseStart; - logFileName = configurationElement["LogFileName"]; + this.logFileName = configurationElement["LogFileName"]; + this.context = environmentContext; } private void SessionStarted_Handler(object sender, SessionStartEventArgs args) From 5b3bf79a7d13c3c8a32c013f08813e95a0ad169b Mon Sep 17 00:00:00 2001 From: Abhishek Kumawat Date: Tue, 26 Feb 2019 14:55:51 +0530 Subject: [PATCH 2/3] Update 0026-DataCollector-Extensibility-Sources-Parameter.md --- ...llector-Extensibility-Sources-Parameter.md | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md index cda0c01a..89b93214 100644 --- a/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md +++ b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md @@ -1,15 +1,15 @@ -DataCollector Extensibility - Adding testSources parameter +# 0026 DataCollector Extensibility - Adding testSources parameter ## Summary -Exposing testSources parameter to datacollector extensions. List of test sources can be used by datacollectors for processing before test run start. +Exposing `testSources` parameter to datacollector extensions. List of test sources can be used by datacollectors for processing before test run start. ## Motivation -Data collectors initialzation might need test sources list. Example: Static code coverage data collector needs to instrument the test sources before test run start. +Data collector might need test sources list while initialization. Example: Static code coverage data collector needs to instrument the test sources before test run start. ## Using testSources parameter in DataCollector Refer [datacollector](https://github.com/Microsoft/vstest/tree/master/test/TestAssets/OutOfProcDataCollector) doc for more details on how to write a datacollector. -To use testSources parameter in DataCollector: +To use `testSources` parameter in `DataCollector`: ```csharp using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; @@ -62,5 +62,13 @@ public class NewDataCollector : DataCollector } } ``` -DataCollector exposes a `Initialize(System.Xml.XmlElement configurationElement, IEnumerable testSources, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` in addition to existing `Initialize(System.Xml.XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` to expose testSources list to DataCollector. -testSources parameter is a IEnumerable of test source file path. \ No newline at end of file +DataCollector exposes + +`Initialize(System.Xml.XmlElement configurationElement, IEnumerable testSources, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` + +in addition to existing + +`Initialize(System.Xml.XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` + +to expose `testSources` list to `DataCollector`. +`testSources` parameter is a IEnumerable of test source file path. From 685653ecfe4f7e42bf3ea7debf0b0db62860501d Mon Sep 17 00:00:00 2001 From: Abhishek Kumawat Date: Tue, 26 Feb 2019 14:57:48 +0530 Subject: [PATCH 3/3] Update 0026-DataCollector-Extensibility-Sources-Parameter.md --- RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md index 89b93214..1449b9e0 100644 --- a/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md +++ b/RFCs/0026-DataCollector-Extensibility-Sources-Parameter.md @@ -71,4 +71,4 @@ in addition to existing `Initialize(System.Xml.XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)` to expose `testSources` list to `DataCollector`. -`testSources` parameter is a IEnumerable of test source file path. +`testSources` parameter is an IEnumerable of test source file path.