Regres: Don't nuke the daily test dir before using the test results
`runDailyTest()` calls `test.cleanup()` before returning, removing the entire checkout directory, along with coverage data, and the git repo.
This breaks both `postDailyResults()` and `postCoverageResults()`.
Instead use a callback to handle the daily results. This way we can keep the `defer` to clean up even in case of error.
Change-Id: I9730d7dd8ac9c3a19d82d07a68325afdf38bfd40
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/44748
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/tests/regres/cmd/regres/main.go b/tests/regres/cmd/regres/main.go
index 6a7b2e5..383892c 100644
--- a/tests/regres/cmd/regres/main.go
+++ b/tests/regres/cmd/regres/main.go
@@ -632,47 +632,45 @@
dailyHash = git.ParseHash(r.dailyChange)
}
- test, testLists, results, err := r.runDailyTest(dailyHash, reactorBackend, genCov)
- if err != nil {
- return err
- }
+ return r.runDailyTest(dailyHash, reactorBackend, genCov,
+ func(test *test, testLists testlist.Lists, results *deqp.Results) error {
+ errs := []error{}
- errs := []error{}
+ if err := r.postDailyResults(client, test, testLists, results, reactorBackend, dailyHash); err != nil {
+ errs = append(errs, err)
+ }
- if err := r.postDailyResults(client, test, testLists, results, reactorBackend, dailyHash); err != nil {
- errs = append(errs, err)
- }
+ if genCov {
+ if err := r.postCoverageResults(results.Coverage, dailyHash); err != nil {
+ errs = append(errs, err)
+ }
+ }
- if genCov {
- if err := r.postCoverageResults(results.Coverage, dailyHash); err != nil {
- errs = append(errs, err)
- }
- }
-
- return cause.Merge(errs...)
+ return cause.Merge(errs...)
+ })
}
-// runDailyTest performs the full deqp run on the HEAD change, returning the
-// results.
-func (r *regres) runDailyTest(dailyHash git.Hash, reactorBackend reactorBackend, genCov bool) (*test, testlist.Lists, *deqp.Results, error) {
+// runDailyTest performs the full deqp run on the HEAD change, calling
+// withResults with the test results.
+func (r *regres) runDailyTest(dailyHash git.Hash, reactorBackend reactorBackend, genCov bool, withResults func(*test, testlist.Lists, *deqp.Results) error) error {
// Get the full test results.
test := r.newTest(dailyHash).setReactorBackend(reactorBackend)
defer test.cleanup()
// Always need to checkout the change.
if err := test.checkout(); err != nil {
- return nil, nil, nil, cause.Wrap(err, "Failed to checkout '%s'", dailyHash)
+ return cause.Wrap(err, "Failed to checkout '%s'", dailyHash)
}
d, err := r.getOrBuildDEQP(test)
if err != nil {
- return nil, nil, nil, cause.Wrap(err, "Failed to build deqp for '%s'", dailyHash)
+ return cause.Wrap(err, "Failed to build deqp for '%s'", dailyHash)
}
// Load the test lists.
testLists, err := test.loadTestLists(fullTestListRelPath)
if err != nil {
- return nil, nil, nil, cause.Wrap(err, "Failed to load full test lists for '%s'", dailyHash)
+ return cause.Wrap(err, "Failed to load full test lists for '%s'", dailyHash)
}
if genCov {
@@ -686,16 +684,16 @@
// Build the change.
if err := test.build(); err != nil {
- return nil, nil, nil, cause.Wrap(err, "Failed to build '%s'", dailyHash)
+ return cause.Wrap(err, "Failed to build '%s'", dailyHash)
}
// Run the tests on the change.
results, err := test.run(testLists, d)
if err != nil {
- return nil, nil, nil, cause.Wrap(err, "Failed to test '%s'", dailyHash)
+ return cause.Wrap(err, "Failed to test '%s'", dailyHash)
}
- return test, testLists, results, nil
+ return withResults(test, testLists, results)
}
// postDailyResults posts the results of the daily full deqp run to gerrit as