Skip to content

Commit a436e26

Browse files
topikachugongy
andauthored
Add getSuites() method in TestResultImpl (#464)
Co-authored-by: gongy <[email protected]>
1 parent 6114314 commit a436e26

File tree

3 files changed

+74
-1
lines changed

3 files changed

+74
-1
lines changed

src/main/java/hudson/tasks/junit/TestResult.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,9 @@ public boolean hasChildren() {
695695

696696
@Exported(inline=true,visibility=9)
697697
public Collection<SuiteResult> getSuites() {
698+
if (impl != null) {
699+
return impl.getSuites();
700+
}
698701
return suites;
699702
}
700703

src/main/java/io/jenkins/plugins/junit/storage/TestResultImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
import hudson.tasks.junit.TestDurationResultSummary;
3535
import hudson.tasks.junit.TestResult;
3636
import hudson.tasks.junit.TrendTestResultSummary;
37+
38+
import java.util.Collection;
39+
import java.util.Collections;
3740
import java.util.List;
3841

3942
import hudson.tasks.junit.HistoryTestResultSummary;
@@ -109,5 +112,11 @@ public interface TestResultImpl {
109112
TestResult getPreviousResult();
110113
SuiteResult getSuite(String name);
111114

115+
116+
default Collection<SuiteResult> getSuites() {
117+
return Collections.emptyList();
118+
};
119+
120+
112121
float getTotalTestDuration();
113122
}

src/test/java/io/jenkins/plugins/junit/storage/TestResultStorageJunitTest.java

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import java.sql.Statement;
5757
import java.sql.Types;
5858
import java.util.ArrayList;
59+
import java.util.Collection;
5960
import java.util.Comparator;
6061
import java.util.HashMap;
6162
import java.util.List;
@@ -94,6 +95,7 @@
9495
import static org.hamcrest.MatcherAssert.assertThat;
9596
import static org.hamcrest.Matchers.containsInAnyOrder;
9697
import static org.hamcrest.Matchers.equalTo;
98+
import static org.hamcrest.Matchers.hasProperty;
9799
import static org.hamcrest.Matchers.hasSize;
98100
import static org.hamcrest.core.Is.is;
99101
import static org.junit.Assert.assertEquals;
@@ -175,6 +177,7 @@ public class TestResultStorageJunitTest {
175177
assertEquals(1, a.getResult().getSkipCount());
176178
assertEquals(4, a.getResult().getTotalCount());
177179
assertEquals(1, a.getResult().getPassCount());
180+
assertEquals(2, a.getResult().getSuites().size());
178181
List<CaseResult> failedTests = a.getFailedTests();
179182
assertEquals(2, failedTests.size());
180183
final CaseResult klazzTest1 = failedTests.get(0);
@@ -227,7 +230,21 @@ public class TestResultStorageJunitTest {
227230

228231
final List<TestDurationResultSummary> testDurationResultSummary = pluggableStorage.getTestDurationResultSummary();
229232
assertThat(testDurationResultSummary.get(0).getDuration(), is(200));
230-
233+
234+
//check storage getSuites method
235+
Collection<SuiteResult> suiteResults = pluggableStorage.getSuites();
236+
assertThat(suiteResults, hasSize(2));
237+
//check the two suites name
238+
assertThat(suiteResults, containsInAnyOrder(hasProperty("name", equalTo("supersweet")), hasProperty("name", equalTo("sweet"))));
239+
240+
//check one suite detail
241+
SuiteResult supersweetSuite = suiteResults.stream()
242+
.filter(suite -> suite.getName().equals("supersweet"))
243+
.findFirst()
244+
.get();
245+
assertThat(supersweetSuite.getCases(), hasSize(1));
246+
assertThat(supersweetSuite.getCases().get(0).getName(), equalTo("test1"));
247+
assertThat(supersweetSuite.getCases().get(0).getClassName(), equalTo("another.Klazz"));
231248
// TODO test result summary i.e. failure content
232249
// TODO getFailedSinceRun, TestResult#getChildren, TestObject#getTestResultAction
233250
// TODO more detailed Java queries incl. ClassResult
@@ -675,6 +692,50 @@ public SuiteResult getSuite(String name) {
675692

676693
}
677694

695+
public Collection<SuiteResult> getSuites() {
696+
return query(connection -> {
697+
try (PreparedStatement statement = connection.prepareStatement("SELECT suite, testname, package, classname, errordetails, skipped, duration, stdout, stderr, stacktrace FROM " + Impl.CASE_RESULTS_TABLE + " WHERE job = ? AND build = ? ORDER BY suite")) {
698+
statement.setString(1, job);
699+
statement.setInt(2, build);
700+
try (ResultSet result = statement.executeQuery()) {
701+
SuiteResult suiteResult = null;
702+
TestResult parent = new TestResult(this);
703+
boolean isFirst = true;
704+
List <SuiteResult> suites = new ArrayList<SuiteResult>();
705+
while (result.next()) {
706+
String suiteName = result.getString("suite");
707+
if (isFirst || !suiteResult.getName().equals(suiteName)) {
708+
suiteResult = new SuiteResult(suiteName, null, null, null);
709+
suites.add(suiteResult);
710+
isFirst = false;
711+
}
712+
String resultTestName = result.getString("testname");
713+
String errorDetails = result.getString("errordetails");
714+
String packageName = result.getString("package");
715+
String className = result.getString("classname");
716+
String skipped = result.getString("skipped");
717+
String stdout = result.getString("stdout");
718+
String stderr = result.getString("stderr");
719+
String stacktrace = result.getString("stacktrace");
720+
float duration = result.getFloat("duration");
721+
722+
suiteResult.setParent(parent);
723+
CaseResult caseResult = new CaseResult(suiteResult, className, resultTestName, errorDetails, skipped, duration, stdout, stderr, stacktrace);
724+
final PackageResult packageResult = new PackageResult(parent, packageName);
725+
packageResult.add(caseResult);
726+
ClassResult classResult = new ClassResult(packageResult, className);
727+
classResult.add(caseResult);
728+
caseResult.setClass(classResult);
729+
suiteResult.addCase(caseResult);
730+
}
731+
return suites;
732+
}
733+
}
734+
});
735+
};
736+
737+
738+
678739
@Override
679740
public float getTotalTestDuration() {
680741
return query(connection -> {

0 commit comments

Comments
 (0)