mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	log slow tests (#11487)
* log slow tests Signed-off-by: Andrew Thornton <art27@cantab.net> * placate lint Signed-off-by: Andrew Thornton <art27@cantab.net> * More lint placation Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		@@ -70,3 +70,25 @@ For other databases(replace MSSQL to MYSQL, MYSQL8, PGSQL):
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-mssql#GPG
 | 
					TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-mssql#GPG
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setting timeouts for declaring long-tests and long-flushes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We appreciate that some testing machines may not be very powerful and
 | 
				
			||||||
 | 
					the default timeouts for declaring a slow test or a slow clean-up flush
 | 
				
			||||||
 | 
					may not be appropriate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can either:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Within the test ini file set the following section:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```ini
 | 
				
			||||||
 | 
					[integration-tests]
 | 
				
			||||||
 | 
					SLOW_TEST = 10s ; 10s is the default value
 | 
				
			||||||
 | 
					SLOW_FLUSH = 5S ; 5s is the default value
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Set the following environment variables:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					GITEA_SLOW_TEST_TIME="10s" GITEA_SLOW_FLUSH_TIME="5s" make test-sqlite
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@ import (
 | 
				
			|||||||
	"runtime"
 | 
						"runtime"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
@@ -66,6 +67,27 @@ func TestMain(m *testing.M) {
 | 
				
			|||||||
	mac = routes.NewMacaron()
 | 
						mac = routes.NewMacaron()
 | 
				
			||||||
	routes.RegisterRoutes(mac)
 | 
						routes.RegisterRoutes(mac)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// integration test settings...
 | 
				
			||||||
 | 
						if setting.Cfg != nil {
 | 
				
			||||||
 | 
							testingCfg := setting.Cfg.Section("integration-tests")
 | 
				
			||||||
 | 
							slowTest = testingCfg.Key("SLOW_TEST").MustDuration(slowTest)
 | 
				
			||||||
 | 
							slowFlush = testingCfg.Key("SLOW_FLUSH").MustDuration(slowFlush)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if os.Getenv("GITEA_SLOW_TEST_TIME") != "" {
 | 
				
			||||||
 | 
							duration, err := time.ParseDuration(os.Getenv("GITEA_SLOW_TEST_TIME"))
 | 
				
			||||||
 | 
							if err == nil {
 | 
				
			||||||
 | 
								slowTest = duration
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if os.Getenv("GITEA_SLOW_FLUSH_TIME") != "" {
 | 
				
			||||||
 | 
							duration, err := time.ParseDuration(os.Getenv("GITEA_SLOW_FLUSH_TIME"))
 | 
				
			||||||
 | 
							if err == nil {
 | 
				
			||||||
 | 
								slowFlush = duration
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var helper testfixtures.Helper
 | 
						var helper testfixtures.Helper
 | 
				
			||||||
	if setting.Database.UseMySQL {
 | 
						if setting.Database.UseMySQL {
 | 
				
			||||||
		helper = &testfixtures.MySQL{}
 | 
							helper = &testfixtures.MySQL{}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,12 +13,17 @@ import (
 | 
				
			|||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/queue"
 | 
						"code.gitea.io/gitea/modules/queue"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var prefix string
 | 
					var (
 | 
				
			||||||
 | 
						prefix    string
 | 
				
			||||||
 | 
						slowTest  = 10 * time.Second
 | 
				
			||||||
 | 
						slowFlush = 5 * time.Second
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestLogger is a logger which will write to the testing log
 | 
					// TestLogger is a logger which will write to the testing log
 | 
				
			||||||
type TestLogger struct {
 | 
					type TestLogger struct {
 | 
				
			||||||
@@ -87,6 +92,7 @@ func (w *testLoggerWriterCloser) Close() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// PrintCurrentTest prints the current test to os.Stdout
 | 
					// PrintCurrentTest prints the current test to os.Stdout
 | 
				
			||||||
func PrintCurrentTest(t testing.TB, skip ...int) func() {
 | 
					func PrintCurrentTest(t testing.TB, skip ...int) func() {
 | 
				
			||||||
 | 
						start := time.Now()
 | 
				
			||||||
	actualSkip := 1
 | 
						actualSkip := 1
 | 
				
			||||||
	if len(skip) > 0 {
 | 
						if len(skip) > 0 {
 | 
				
			||||||
		actualSkip = skip[0]
 | 
							actualSkip = skip[0]
 | 
				
			||||||
@@ -100,9 +106,33 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	writerCloser.setT(&t)
 | 
						writerCloser.setT(&t)
 | 
				
			||||||
	return func() {
 | 
						return func() {
 | 
				
			||||||
 | 
							took := time.Since(start)
 | 
				
			||||||
 | 
							if took > slowTest {
 | 
				
			||||||
 | 
								if log.CanColorStdout {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow)))
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s is a slow tets (took %v)\n", t.Name(), took)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							timer := time.AfterFunc(slowFlush, func() {
 | 
				
			||||||
 | 
								if log.CanColorStdout {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), slowFlush)
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", t.Name(), slowFlush)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
		if err := queue.GetManager().FlushAll(context.Background(), -1); err != nil {
 | 
							if err := queue.GetManager().FlushAll(context.Background(), -1); err != nil {
 | 
				
			||||||
			t.Errorf("Flushing queues failed with error %v", err)
 | 
								t.Errorf("Flushing queues failed with error %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							timer.Stop()
 | 
				
			||||||
 | 
							flushTook := time.Since(start) - took
 | 
				
			||||||
 | 
							if flushTook > slowFlush {
 | 
				
			||||||
 | 
								if log.CanColorStdout {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), fmt.Formatter(log.NewColoredValue(flushTook, log.Bold, log.FgRed)))
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", t.Name(), flushTook)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		_ = writerCloser.Close()
 | 
							_ = writerCloser.Close()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user