summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-09-01 14:05:04 +0100
committerGitHub <noreply@github.com>2021-09-01 14:05:04 +0100
commit6e0e414f553279d0ee330b078637d2b163b85159 (patch)
tree217053e0c86428ff1efdf5a84a60a79191c21aa3
parentde2e96e37b58eebd0cee1def7f07e6e96023c207 (diff)
downloadgitea-6e0e414f553279d0ee330b078637d2b163b85159.tar.gz
gitea-6e0e414f553279d0ee330b078637d2b163b85159.zip
Ensure that the testlogger has its final test removal safely (#16907)
It is possible to get a data race right at the end of the TestMain in integrations during the final removal of the test from the testlogger. This PR uses a Reset function to remove any final tests but adds some extra logging which will forcibly fail if there is an unclosed logger. Signed-off-by: Andrew Thornton <art27@cantab.net>
-rw-r--r--integrations/integration_test.go2
-rw-r--r--integrations/testlogger.go15
2 files changed, 16 insertions, 1 deletions
diff --git a/integrations/integration_test.go b/integrations/integration_test.go
index 7ddcf3e1cd..1003f136dd 100644
--- a/integrations/integration_test.go
+++ b/integrations/integration_test.go
@@ -120,7 +120,7 @@ func TestMain(m *testing.M) {
}
exitCode := m.Run()
- writerCloser.t = nil
+ writerCloser.Reset()
if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil {
fmt.Printf("util.RemoveAll: %v\n", err)
diff --git a/integrations/testlogger.go b/integrations/testlogger.go
index ff408b314c..69db480c15 100644
--- a/integrations/testlogger.go
+++ b/integrations/testlogger.go
@@ -90,6 +90,21 @@ func (w *testLoggerWriterCloser) Close() error {
return nil
}
+func (w *testLoggerWriterCloser) Reset() {
+ w.Lock()
+ if len(w.t) > 0 {
+ for _, t := range w.t {
+ if t == nil {
+ continue
+ }
+ fmt.Fprintf(os.Stdout, "Unclosed logger writer in test: %s", (*t).Name())
+ (*t).Errorf("Unclosed logger writer in test: %s", (*t).Name())
+ }
+ w.t = nil
+ }
+ w.Unlock()
+}
+
// PrintCurrentTest prints the current test to os.Stdout
func PrintCurrentTest(t testing.TB, skip ...int) func() {
start := time.Now()