Skip to content

Commit a98e91e

Browse files
committed
Fix on parallel branches bug
1 parent a563cd5 commit a98e91e

File tree

3 files changed

+64
-4
lines changed

3 files changed

+64
-4
lines changed

src/main/java/org/jenkinsci/plugins/JiraTestResultReporter/JiraTestData.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,24 @@
1515
*/
1616
package org.jenkinsci.plugins.JiraTestResultReporter;
1717

18+
import java.util.Collections;
19+
import java.util.List;
20+
import java.util.logging.Level;
21+
import java.util.logging.Logger;
22+
1823
import hudson.EnvVars;
1924
import hudson.tasks.junit.CaseResult;
2025
import hudson.tasks.junit.TestAction;
2126
import hudson.tasks.junit.TestObject;
2227
import hudson.tasks.junit.TestResultAction;
2328

24-
import java.util.Collections;
25-
import java.util.List;
26-
2729
/**
2830
* Created by tuicu.
2931
*/
3032
public class JiraTestData extends TestResultAction.Data {
33+
34+
private static final Logger LOGGER = Logger.getLogger("JiraIssuePlugin.log");
35+
3136
private EnvVars envVars;
3237

3338
/**
@@ -47,6 +52,10 @@ public EnvVars getEnvVars() {
4752
}
4853

4954

55+
public static void log(String message) {
56+
LOGGER.log(Level.INFO, message);
57+
}
58+
5059
/**
5160
* Method for creating test actions associated with tests
5261
* @param testObject

src/main/java/org/jenkinsci/plugins/JiraTestResultReporter/JiraTestDataPublisher.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,23 @@ public TestResultAction.Data contributeTestData(Run<?, ?> run, @Nonnull FilePath
210210
hasTestData |= unlinkIssuesForPassedTests(listener, project, job, envVars, getTestCaseResults(testResult));
211211
}
212212

213-
return hasTestData? new JiraTestData(envVars) : null;
213+
if (hasTestData) {
214+
// Workaround to make feasible to use the publisher in parallel executions
215+
if (notReportedTestDataBefore(envVars)) {
216+
JiraTestDataRegistry.getInstance().put(envVars);
217+
return JiraTestDataRegistry.getInstance().get(envVars);
218+
} else {
219+
return null;
220+
}
221+
} else {
222+
return null;
223+
}
214224
}
215225

226+
private boolean notReportedTestDataBefore(EnvVars envVars) {
227+
return JiraTestDataRegistry.getInstance().get(envVars) == null;
228+
}
229+
216230
private boolean unlinkIssuesForPassedTests(TaskListener listener, Job project, Job job, EnvVars envVars, List<CaseResult> testCaseResults) {
217231
boolean unlinked = false;
218232
for(CaseResult test : testCaseResults) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.jenkinsci.plugins.JiraTestResultReporter;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import hudson.EnvVars;
7+
8+
public class JiraTestDataRegistry {
9+
10+
private static final String BUILD_URL = "BUILD_URL";
11+
12+
private static JiraTestDataRegistry instance = new JiraTestDataRegistry();
13+
14+
private Map<String, JiraTestData> jiraTestDataByUrl;
15+
16+
private JiraTestDataRegistry() {
17+
jiraTestDataByUrl = new HashMap<String, JiraTestData>();
18+
}
19+
20+
public static JiraTestDataRegistry getInstance() {
21+
return instance;
22+
}
23+
24+
public JiraTestData get(EnvVars envVars) {
25+
String key = envVars.get(BUILD_URL);
26+
synchronized (key) {
27+
return jiraTestDataByUrl.get(key);
28+
}
29+
}
30+
31+
public void put(EnvVars envVars) {
32+
String key = envVars.get(BUILD_URL);
33+
synchronized (key) {
34+
jiraTestDataByUrl.put(key, new JiraTestData(envVars));
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)