-
Notifications
You must be signed in to change notification settings - Fork 325
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Blame for vstest #915
Merged
Merged
Blame for vstest #915
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
d6ee1f4
Feature blame (#1)
vagisha-nidhi af00f67
Unit tests added and minor changes
vagisha-nidhi 46f87dd
Suggested changes made
vagisha-nidhi 6922cb9
Spaces removed
vagisha-nidhi 1e9b6ca
Build updated
vagisha-nidhi 1d352f3
Integration test added
vagisha-nidhi 5663e13
Blame Processor priority changed in test
vagisha-nidhi 35e5cf8
BlameUnitTestProject updated
vagisha-nidhi 8599465
SDK Previous version updated to 15.3.0-preview-20170628-02
vagisha-nidhi 57c24b5
Merge branch 'master' into newBlameBranch
codito File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
174 changes: 174 additions & 0 deletions
174
src/Microsoft.TestPlatform.Extensions.BlameDataCollector/BlameCollector.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT license. See LICENSE file in the project root for full license information. | ||
|
||
namespace Microsoft.TestPlatform.Extensions.BlameDataCollector | ||
{ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.IO; | ||
using System.Linq; | ||
using System.Xml; | ||
using Microsoft.VisualStudio.TestPlatform.ObjectModel; | ||
using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection; | ||
|
||
/// <summary> | ||
/// The blame collector. | ||
/// </summary> | ||
[DataCollectorFriendlyName("Blame")] | ||
[DataCollectorTypeUri("datacollector://Microsoft/TestPlatform/Extensions/Blame/v1")] | ||
public class BlameCollector : DataCollector, ITestExecutionEnvironmentSpecifier | ||
{ | ||
private DataCollectionSink dataCollectionSink; | ||
private DataCollectionEnvironmentContext context; | ||
private DataCollectionEvents events; | ||
private List<TestCase> testSequence; | ||
private IBlameReaderWriter blameReaderWriter; | ||
private XmlElement configurationElement; | ||
private int testStartCount; | ||
private int testEndCount; | ||
|
||
/// <summary> | ||
/// Initializes a new instance of the <see cref="BlameCollector"/> class. | ||
/// Using XmlReaderWriter by default | ||
/// </summary> | ||
public BlameCollector() | ||
: this(new XmlReaderWriter()) | ||
{ | ||
} | ||
|
||
/// <summary> | ||
/// Initializes a new instance of the <see cref="BlameCollector"/> class. | ||
/// </summary> | ||
/// <param name="blameReaderWriter"> | ||
/// BlameReaderWriter instance. | ||
/// </param> | ||
protected BlameCollector(IBlameReaderWriter blameReaderWriter) | ||
{ | ||
this.blameReaderWriter = blameReaderWriter; | ||
} | ||
|
||
/// <summary> | ||
/// Gets environment variables that should be set in the test execution environment | ||
/// </summary> | ||
/// <returns>Environment variables that should be set in the test execution environment</returns> | ||
public IEnumerable<KeyValuePair<string, string>> GetTestExecutionEnvironmentVariables() | ||
{ | ||
return Enumerable.Empty<KeyValuePair<string, string>>(); | ||
} | ||
|
||
/// <summary> | ||
/// Initializes parameters for the new instance of the class <see cref="BlameDataCollector"/> | ||
/// </summary> | ||
/// <param name="configurationElement">The Xml Element to save to</param> | ||
/// <param name="events">Data collection events to which methods subscribe</param> | ||
/// <param name="dataSink">A data collection sink for data transfer</param> | ||
/// <param name="logger">Data Collection Logger to send messages to the client </param> | ||
/// <param name="environmentContext">Context of data collector environment</param> | ||
public override void Initialize( | ||
XmlElement configurationElement, | ||
DataCollectionEvents events, | ||
DataCollectionSink dataSink, | ||
DataCollectionLogger logger, | ||
DataCollectionEnvironmentContext environmentContext) | ||
{ | ||
ValidateArg.NotNull(logger, nameof(logger)); | ||
|
||
this.events = events; | ||
this.dataCollectionSink = dataSink; | ||
this.context = environmentContext; | ||
this.configurationElement = configurationElement; | ||
this.testSequence = new List<TestCase>(); | ||
|
||
// Subscribing to events | ||
this.events.SessionEnd += this.SessionEnded_Handler; | ||
this.events.TestCaseStart += this.EventsTestCaseStart; | ||
this.events.TestCaseEnd += this.EventsTestCaseEnd; | ||
} | ||
|
||
/// <summary> | ||
/// Called when Test Case Start event is invoked | ||
/// </summary> | ||
/// <param name="sender">Sender</param> | ||
/// <param name="e">TestCaseStartEventArgs</param> | ||
private void EventsTestCaseStart(object sender, TestCaseStartEventArgs e) | ||
{ | ||
if (EqtTrace.IsInfoEnabled) | ||
{ | ||
EqtTrace.Info("Blame Collector : Test Case Start"); | ||
} | ||
|
||
this.testSequence.Add(e.TestElement); | ||
this.testStartCount++; | ||
} | ||
|
||
/// <summary> | ||
/// Called when Test Case End event is invoked | ||
/// </summary> | ||
/// <param name="sender">Sender</param> | ||
/// <param name="e">TestCaseEndEventArgs</param> | ||
private void EventsTestCaseEnd(object sender, TestCaseEndEventArgs e) | ||
{ | ||
if (EqtTrace.IsInfoEnabled) | ||
{ | ||
EqtTrace.Info("Blame Collector : Test Case End"); | ||
} | ||
|
||
this.testEndCount++; | ||
} | ||
|
||
/// <summary> | ||
/// Called when Session End event is invoked | ||
/// </summary> | ||
/// <param name="sender">Sender</param> | ||
/// <param name="args">SessionEndEventArgs</param> | ||
private void SessionEnded_Handler(object sender, SessionEndEventArgs args) | ||
{ | ||
if (EqtTrace.IsInfoEnabled) | ||
{ | ||
EqtTrace.Info("Blame Collector : Session End"); | ||
} | ||
|
||
// If the last test crashes, it will not invoke a test case end and therefore | ||
// In case of crash testStartCount will be greater than testEndCount and we need to write the sequence | ||
// And send the attachment | ||
if (this.testStartCount > this.testEndCount) | ||
{ | ||
var filepath = Path.Combine(this.GetResultsDirectory(), Constants.AttachmentFileName); | ||
filepath = this.blameReaderWriter.WriteTestSequence(this.testSequence, filepath); | ||
var fileTranferInformation = new FileTransferInformation(this.context.SessionDataCollectionContext, filepath, true); | ||
this.dataCollectionSink.SendFileAsync(fileTranferInformation); | ||
} | ||
|
||
this.DeregisterEvents(); | ||
} | ||
|
||
/// <summary> | ||
/// Method to deregister handlers and cleanup | ||
/// </summary> | ||
private void DeregisterEvents() | ||
{ | ||
this.events.SessionEnd -= this.SessionEnded_Handler; | ||
this.events.TestCaseStart -= this.EventsTestCaseStart; | ||
this.events.TestCaseEnd -= this.EventsTestCaseEnd; | ||
} | ||
|
||
private string GetResultsDirectory() | ||
{ | ||
try | ||
{ | ||
XmlElement resultsDirectoryElement = this.configurationElement["ResultsDirectory"]; | ||
string resultsDirectory = resultsDirectoryElement != null ? resultsDirectoryElement.InnerText : string.Empty; | ||
return resultsDirectory; | ||
} | ||
catch (NullReferenceException exception) | ||
{ | ||
if (EqtTrace.IsErrorEnabled) | ||
{ | ||
EqtTrace.Error("Blame Collector : " + exception); | ||
} | ||
|
||
return string.Empty; | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Require change in build.sh
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this assembly be added for signing?