Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit 91e63b8

Browse files
author
Nitin Gurram
committed
Merge pull request #282 from Microsoft/users/nigurr/FixTestResultPublishCompat
Fix compat issues with old Test Results publish task with new agent
2 parents 2462da3 + 3261b61 commit 91e63b8

File tree

3 files changed

+81
-30
lines changed

3 files changed

+81
-30
lines changed

Diff for: src/agent/commands/results.publish.ts

+40-12
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,10 @@ export class ResultsPublishCommand implements cm.IAsyncCommand {
3737
var publishRunAttachments: boolean = (this.command.properties['publishRunAttachments'] === "true");
3838
var resultFilesPath = this.command.properties['resultFiles'];
3939
var mergeResults: boolean = (this.command.properties['mergeResults'] === 'true');
40+
var fileNumber: string = this.command.properties['fileNumber'];
41+
var oldResultFilePath: string = this.command.message;
4042
var command = this.command;
4143

42-
var testRunContext: trp.TestRunContext = {
43-
requestedFor: this.executionContext.variables["build.requestedFor"],
44-
buildId: this.executionContext.variables["build.buildId"],
45-
releaseEnvironmentUri: this.executionContext.variables["release.environmentUri"],
46-
releaseUri: this.executionContext.variables["release.releaseUri"],
47-
platform: platform,
48-
config: config,
49-
runTitle: runTitle,
50-
fileNumber: "1",
51-
publishRunAttachments: publishRunAttachments
52-
};
53-
5444
var reader;
5545
if (resultType == "junit") {
5646
reader = new trr.JUnitResultReader(this.command);
@@ -65,6 +55,44 @@ export class ResultsPublishCommand implements cm.IAsyncCommand {
6555
this.command.warning("Test results of format '" + resultType + "'' are not supported on this build agent");
6656
}
6757

58+
//start - This logic is purely exisiting for keeping the compat with old tasks
59+
if (oldResultFilePath && oldResultFilePath != '') {
60+
var testRunContext: trp.TestRunContext = {
61+
requestedFor: this.executionContext.variables["build.requestedFor"],
62+
buildId: this.executionContext.variables["build.buildId"],
63+
releaseEnvironmentUri: this.executionContext.variables["release.environmentUri"],
64+
releaseUri: this.executionContext.variables["release.releaseUri"],
65+
platform: platform,
66+
config: config,
67+
runTitle: runTitle,
68+
fileNumber: fileNumber,
69+
publishRunAttachments: publishRunAttachments
70+
};
71+
72+
var testRunPublisher = new trp.TestRunPublisher(this.executionContext.service, command, teamProject, testRunContext, reader);
73+
testRunPublisher.publishTestRun(oldResultFilePath).then(function(createdTestRun) {
74+
defer.resolve(null);
75+
})
76+
.fail((err) => {
77+
this.command.warning("Failed to publish test results: " + err.message);
78+
defer.resolve(null);
79+
});
80+
return defer.promise;
81+
}
82+
//end
83+
84+
var testRunContext: trp.TestRunContext = {
85+
requestedFor: this.executionContext.variables["build.requestedFor"],
86+
buildId: this.executionContext.variables["build.buildId"],
87+
releaseEnvironmentUri: this.executionContext.variables["release.environmentUri"],
88+
releaseUri: this.executionContext.variables["release.releaseUri"],
89+
platform: platform,
90+
config: config,
91+
runTitle: runTitle,
92+
fileNumber: "1",
93+
publishRunAttachments: publishRunAttachments
94+
};
95+
6896
if (reader != null && resultFilesPath) {
6997
var testRunPublisher = new trp.TestRunPublisher(this.executionContext.service, command, teamProject, testRunContext, reader);
7098
var resultFiles = resultFilesPath.split(",");

Diff for: src/test/publishcodecoveragetests.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import path = require('path');
88
import fm = require('./lib/feedback');
99
import tec = require('./lib/testExecutionContext');
1010
import ccp = require('../agent/codecoveragepublisher');
11-
import cpc = require('../agent/commands/codecoverage.publish')
11+
import cpc = require('../agent/commands/codecoverage.publish');
1212
import csr = require('../agent/codecoveragesummaryreader');
1313
import cm = require('../agent/common');
1414
import ifm = require('../agent/interfaces');

Diff for: src/test/publishertests.ts

+40-17
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@ import trr = require('../agent/testresultreader');
1111
import cm = require('../agent/common');
1212
import ifm = require('../agent/interfaces');
1313
import testifm = require('vso-node-api/interfaces/TestInterfaces');
14+
import tc = require('./lib/testcommand');
15+
import rp = require('../agent/commands/results.publish');
16+
import tec = require('./lib/testExecutionContext');
17+
18+
var jobInf = require('./lib/testJobInfo');
1419

1520
function resultFile(filename: string) {
1621
return path.resolve(__dirname, 'testresults', filename);
1722
}
1823

19-
describe('PublisherTests', function () {
24+
describe('PublisherTests', function() {
2025
const runContext: trp.TestRunContext = {
2126
requestedFor: "userx",
2227
buildId: "21",
@@ -43,6 +48,8 @@ describe('PublisherTests', function () {
4348
const resultsFileNUnit2 = resultFile('nunitresults.1.xml');
4449
const resultsFileXUnit = resultFile('xunitresults.xml');
4550
const resultsFileXUnit2 = resultFile('xunitresults.1.xml');
51+
var junitFilePath = path.resolve(__dirname, './testresults/junitresults1.xml');
52+
var testExecutionContext;
4653

4754
it('results.publish : JUnit results file', () => {
4855
const feedbackChannel = new fm.TestFeedbackChannel();
@@ -60,15 +67,15 @@ describe('PublisherTests', function () {
6067
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
6168
});
6269
});
63-
70+
6471
it('results.publish : JUnit results file with a suite and no cases', () => {
6572
const feedbackChannel = new fm.TestFeedbackChannel();
6673
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerJUnit);
6774
return testRunPublisher.publishTestRun(resultsFileJUnitNoTestCases).then(createdTestRun => {
6875
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
6976
});
7077
});
71-
78+
7279
it('results.publish : JUnit results file with no suites', () => {
7380
const feedbackChannel = new fm.TestFeedbackChannel();
7481
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerJUnit);
@@ -82,7 +89,7 @@ describe('PublisherTests', function () {
8289
const feedbackChannel = new fm.TestFeedbackChannel();
8390
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerNUnit);
8491

85-
return testRunPublisher.publishTestRun(resultsFileNUnit).then(createdTestRun =>{
92+
return testRunPublisher.publishTestRun(resultsFileNUnit).then(createdTestRun => {
8693
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
8794
});
8895
});
@@ -95,7 +102,7 @@ describe('PublisherTests', function () {
95102
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
96103
});
97104
});
98-
105+
99106
it('results.publish : error handling for end test run', () => {
100107
const feedbackChannel = new fm.TestFeedbackChannel();
101108
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerJUnit);
@@ -107,26 +114,26 @@ describe('PublisherTests', function () {
107114

108115
// error handling/propagation from end test run
109116
return testRunPublisher.endTestRun(testRun.id, testRun.resultsFile)
110-
.then(createdTestRun => assert(false, 'ResultPublish Task did not fail as expected'))
111-
.catch(err => {
112-
assert(err.message == "Too bad - endTestRun failed", 'ResultPublish Task error message does not match expected - ' + err.message);
113-
});
117+
.then(createdTestRun => assert(false, 'ResultPublish Task did not fail as expected'))
118+
.catch(err => {
119+
assert(err.message == "Too bad - endTestRun failed", 'ResultPublish Task error message does not match expected - ' + err.message);
120+
});
114121
});
115122

116123
it('results.publish : error handling for reading results', () => {
117124
const feedbackChannel = new fm.TestFeedbackChannel();
118125
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerJUnit);
119-
126+
120127
// error handling/propagation from parsing failures of junit/nunit files
121128
var resultsFile = path.resolve(__dirname, './testresults/junit_bad.xml');
122129
return testRunPublisher.publishTestRun(resultsFile)
123-
.then(createdTestRun => {
124-
assert(!feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
125-
})
126-
.catch(err => {
127-
assert(err.message == "Unmatched closing tag: XYZXYZuite\nLine: 13\nColumn: 16\nChar: >",
130+
.then(createdTestRun => {
131+
assert(!feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
132+
})
133+
.catch(err => {
134+
assert(err.message == "Unmatched closing tag: XYZXYZuite\nLine: 13\nColumn: 16\nChar: >",
128135
'ResultPublish Task Failed as expected! Details : ' + err.message);
129-
});
136+
});
130137
});
131138

132139
it('results.publish : JUnit reader sanity check without run title', () => {
@@ -318,7 +325,7 @@ describe('PublisherTests', function () {
318325
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
319326
});
320327
})
321-
328+
322329
it('results.publish : JUnit results file with merge support with one invalid xml file', () => {
323330
const feedbackChannel = new fm.TestFeedbackChannel();
324331
const testRunPublisher = new trp.TestRunPublisher(feedbackChannel, null, "teamProject", runContext, readerXUnit);
@@ -327,4 +334,20 @@ describe('PublisherTests', function () {
327334
assert(feedbackChannel.jobsCompletedSuccessfully(), 'ResultPublish Task Failed! Details : ' + feedbackChannel.getRecordsString());
328335
});
329336
})
337+
338+
it('results.publish : Publish Test Results with old task compat', () => {
339+
var properties: { [name: string]: string } = { "type": "junit", "platform": "platform", "config": "config", "runTitle": "Test Title", "publishRunAttachments": "true", "fileNumber": "1" };
340+
var message = junitFilePath;
341+
var command: cm.ITaskCommand = new tc.TestCommand(null, properties, message);
342+
testExecutionContext = new tec.TestExecutionContext(new jobInf.TestJobInfo({}));
343+
testExecutionContext.variables['system.teamProject'] = "teamProject";
344+
var testResultsPublisher = new rp.ResultsPublishCommand(testExecutionContext, command);
345+
346+
testResultsPublisher.runCommandAsync().then(function(result) {
347+
assert(testExecutionContext.service.jobsCompletedSuccessfully());
348+
},
349+
function(err) {
350+
assert(false, 'Publish Test Results failed for old tasks: ' + testExecutionContext.service.getRecordsString())
351+
});
352+
})
330353
});

0 commit comments

Comments
 (0)