# HG changeset patch # User Axel Prel <axel.prel@xcg-consulting.fr> # Date 1718197615 -7200 # Wed Jun 12 15:06:55 2024 +0200 # Node ID 93875fe45953a0c26a91bf3965967d32c85b8fc6 # Parent 2f2261ad2e7bc910b49e03ab5713de767ea27818 # EXP-Topic golangCI gCI: activate tParallel linter enfores the use of t.Parallel() in the tests diff --git a/.golangci.yml b/.golangci.yml --- a/.golangci.yml +++ b/.golangci.yml @@ -92,7 +92,7 @@ - nolintlint # Reports ill-formed or insufficient nolint directives style v1.26.0 - nonamedreturns # Reports all named returns. style v1.46.0 - nosprintfhostport # Checks for misuse of Sprintf to construct a host with port in a URL. style v1.46.0 - # - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test style, test v1.33.0 + - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test style, test v1.33.0 - perfsprint # Checks that fmt.Sprintf can be replaced with a faster alternative. performance v1.55.0 - prealloc # Finds slice declarations that could potentially be preallocated performance v1.19.0 - predeclared # find code that shadows one of Go's predeclared identifiers style v1.35.0 @@ -144,6 +144,8 @@ enable-all: true disable: - require-error + paralleltest: + ignore-loop-var: true issues: # Maximum issues count per one linter. Set to 0 to disable. Default is 50. max-issues-per-linter: 0 @@ -165,6 +167,10 @@ - path: 'cmd/|auth/|restapi/' linters: - lll + - path: 'utils/log-console-writer_test.go|tests' + linters: + - tparallel + - paralleltest exclude-dirs: - dependencies - restapi/operations diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ GOLANGCI_LINT_VERSION = v1.64.6 GOLANGCI_LINT_BIN = tools/bin/golangci-lint-$(GOLANGCI_LINT_VERSION) +GOLANGCI_LINT_ARGS = BASEVERSION = $(shell grep version: swagger.yaml| cut -f2 -d: |xargs) VERSION = $(BASEVERSION) diff --git a/engines/mjml/mjml_test.go b/engines/mjml/mjml_test.go --- a/engines/mjml/mjml_test.go +++ b/engines/mjml/mjml_test.go @@ -59,7 +59,9 @@ } func TestDukType(t *testing.T) { + t.Parallel() t.Run("Simple", func(t *testing.T) { + t.Parallel() ctx, err := initDukTapeCtx() require.NoError(t, err) @@ -70,6 +72,7 @@ })) }) t.Run("WithError", func(t *testing.T) { + t.Parallel() ctx, err := initDukTapeCtx() require.NoError(t, err) @@ -82,6 +85,7 @@ t.Log(r) }) t.Run("Invalid-mjml", func(t *testing.T) { + t.Parallel() ctx, err := initDukTapeCtx() require.NoError(t, err) diff --git a/engines/mustache/engine_test.go b/engines/mustache/engine_test.go --- a/engines/mustache/engine_test.go +++ b/engines/mustache/engine_test.go @@ -11,6 +11,7 @@ ) func TestVarlist(t *testing.T) { + t.Parallel() mt, err := mustache.ParseString(` {{#outsection}} {{#section1}} diff --git a/engines/wpd/process_test.go b/engines/wpd/process_test.go --- a/engines/wpd/process_test.go +++ b/engines/wpd/process_test.go @@ -11,6 +11,7 @@ ) func TestProcess(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) p, err := NewRealProcess() require.NoError(t, err) diff --git a/engines/wpd/wpd_test.go b/engines/wpd/wpd_test.go --- a/engines/wpd/wpd_test.go +++ b/engines/wpd/wpd_test.go @@ -14,13 +14,14 @@ ) func TestRealWpd(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) p, err := wpd.NewRealProcess() require.NoError(t, err) ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() + t.Cleanup(cancel) wpd, err := wpd.NewProcessWPD(p, log) require.NoError(t, err) diff --git a/lib/condchan_test.go b/lib/condchan_test.go --- a/lib/condchan_test.go +++ b/lib/condchan_test.go @@ -26,6 +26,7 @@ } func TestCondChan(t *testing.T) { + t.Parallel() needStop := false ch, hit := redner.NewCondChan(func() bool { return needStop }) diff --git a/models/template_db_test.go b/models/template_db_test.go --- a/models/template_db_test.go +++ b/models/template_db_test.go @@ -15,6 +15,7 @@ ) func TestTemplateDB(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) ctx, cancel := testutils.GetContext(t) ctx = log.WithContext(ctx) @@ -22,7 +23,7 @@ defer cancel() db := database.GetTestDB(ctx, t, migration.Source) - defer db.Close() + t.Cleanup(db.Close) _, err := database.Exec(db, database.SQLInsert(models.AccountDB{Name: "account"}), &log) require.NoError(t, err) diff --git a/restapi/handlers/account-template-update_test.go b/restapi/handlers/account-template-update_test.go --- a/restapi/handlers/account-template-update_test.go +++ b/restapi/handlers/account-template-update_test.go @@ -7,14 +7,15 @@ "github.com/Masterminds/squirrel" "github.com/stretchr/testify/assert" + "orus.io/orus-io/go-orusapi/database" - "orus.io/orus-io/rednerd/models" "orus.io/orus-io/rednerd/testutils" "orus.io/orus-io/rednerd/testutils/apitester" ) func TestAccountTemplateUpdate(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) ctx, cancel := testutils.GetContext(t) ctx = log.WithContext(ctx) @@ -22,25 +23,39 @@ defer cancel() tester := apitester.NewAPITester(ctx, t, nil) - tmpl := models.Template{ - Account: "janedoe", - Name: "hello", - Language: "mustache", - Produces: "text/plain", - BodyFormat: "text", - Body: "Hello {{name}}!", + tmpls := []models.Template{ + { + Account: "janedoe", + Name: "1", + Language: "mustache", + Produces: "text/plain", + BodyFormat: "text", + Body: "Hello {{name}}!", + }, + { + Account: "janedoe", + Name: "2", + Language: "mustache", + Produces: "text/plain", + BodyFormat: "text", + Body: "Hello {{name}}!", + }, } - defer tester.Close() - defer tester.Logout() + t.Cleanup(func() { + tester.Close() + tester.Logout() + }) tester.Login("admin", "admin") tester.CreateUser("janedoe", "janedoe") + tester.Logout() tester.Login("janedoe", "janedoe") t.Run("Update non-existent template", func(t *testing.T) { + t.Parallel() r := tester.APITest("template_update"). - Put("/api/v1/template/janedoe/hello"). + Put("/api/v1/template/janedoe/unknown"). JSON(&models.Template{}). Expect(t). Status(http.StatusNotFound). @@ -53,21 +68,23 @@ }) t.Run("Update body", func(t *testing.T) { - defer func() { + t.Parallel() + + t.Cleanup(func() { _, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log) - }() + }()) var responseTemplate models.Template tester.CreateTemplate( "janedoe", - &tmpl, + &tmpls[0], &responseTemplate, ) responseTemplate.Body = "Hi {{name}}!" r := tester.APITest("template_update"). - Put("/api/v1/template/janedoe/hello"). + Put("/api/v1/template/janedoe/" + tmpls[0].Name). JSON(&responseTemplate). Expect(t). Status(http.StatusOK). @@ -78,21 +95,23 @@ }) t.Run("Rename", func(t *testing.T) { - defer func() { + t.Parallel() + + t.Cleanup(func() { _, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log) - }() + }()) var responseTemplate models.Template tester.CreateTemplate( "janedoe", - &tmpl, + &tmpls[1], &responseTemplate, ) responseTemplate.Name = "hi" r := tester.APITest("template_update"). - Put("/api/v1/template/janedoe/hello"). + Put("/api/v1/template/janedoe/" + tmpls[1].Name). JSON(&responseTemplate). Expect(t). Status(http.StatusOK). diff --git a/restapi/handlers/renderlogs_test.go b/restapi/handlers/renderlogs_test.go --- a/restapi/handlers/renderlogs_test.go +++ b/restapi/handlers/renderlogs_test.go @@ -15,12 +15,14 @@ ) func TestRenderLogs(t *testing.T) { + t.Parallel() ctx, cancel := testutils.GetContext(t) - defer cancel() - tester := apitester.NewAPITester(ctx, t, nil) - defer tester.Close() - + t.Cleanup(func() { + tester.Close() + tester.Logout() + cancel() + }) now := time.Now() tester.SetNow(now) // db := database.NewSQLHelper(ctx, tester.DB, tester.Logger) @@ -77,8 +79,6 @@ tester.Logout() tester.Login("admin", "admin") - - defer tester.Logout() csvFilename := strconv.Itoa(tester.Now().Year()) + "-" + fmt.Sprintf("%02d", int(tester.Now().Month())) + diff --git a/restapi/handlers/user-get_test.go b/restapi/handlers/user-get_test.go --- a/restapi/handlers/user-get_test.go +++ b/restapi/handlers/user-get_test.go @@ -44,6 +44,7 @@ } func TestUserGet(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) ctx, cancel := testutils.GetContext(t) ctx = log.WithContext(ctx) @@ -51,7 +52,7 @@ defer cancel() tester := apitester.NewAPITester(ctx, t, nil) - defer tester.Close() + t.Cleanup(tester.Close) // login as admin and create a user tester.Login("admin", "admin") @@ -66,6 +67,7 @@ tester.Logout() t.Run("unauthorized", func(t *testing.T) { + t.Parallel() // try and get the list as johndoe_1 tester.Login("johndoe", "johndoe") defer tester.Logout() @@ -76,6 +78,7 @@ End() }) t.Run("basic", func(t *testing.T) { + t.Parallel() tester.Login("admin", "admin") defer tester.Logout() r := tester.APITest("user_get"). diff --git a/restapi/handlers/user-list_test.go b/restapi/handlers/user-list_test.go --- a/restapi/handlers/user-list_test.go +++ b/restapi/handlers/user-list_test.go @@ -13,6 +13,7 @@ ) func TestUserList(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) ctx, cancel := testutils.GetContext(t) ctx = log.WithContext(ctx) @@ -20,7 +21,7 @@ defer cancel() tester := apitester.NewAPITester(ctx, t, nil) - defer tester.Close() + t.Cleanup(tester.Close) // login as admin and create 10 users tester.Login("admin", "admin") @@ -34,6 +35,7 @@ tester.Logout() t.Run("unauthorized", func(t *testing.T) { + t.Parallel() // try and get the list as johndoe_1 tester.Login("johndoe_1", "password1") defer tester.Logout() @@ -44,6 +46,7 @@ End() }) t.Run("basic", func(t *testing.T) { + t.Parallel() tester.Login("admin", "admin") defer tester.Logout() r := tester.APITest("user_list"). diff --git a/restapi/handlers/user-update_test.go b/restapi/handlers/user-update_test.go --- a/restapi/handlers/user-update_test.go +++ b/restapi/handlers/user-update_test.go @@ -12,6 +12,7 @@ ) func TestUserUpdate(t *testing.T) { + t.Parallel() log := testutils.GetLogger(t) ctx, cancel := testutils.GetContext(t) ctx = log.WithContext(ctx) @@ -19,7 +20,7 @@ defer cancel() tester := apitester.NewAPITester(ctx, t, nil) - defer tester.Close() + t.Cleanup(tester.Close) // login as admin and create a user tester.Login("admin", "admin") @@ -52,6 +53,7 @@ tester.Logout() t.Run("unauthorized", func(t *testing.T) { + t.Parallel() tester.Login("janedoe", "janedoe") defer tester.Logout() _ = tester.APITest("user_update"). @@ -62,6 +64,7 @@ End() }) t.Run("basic", func(t *testing.T) { + t.Parallel() tester.Login("johndoe", "johndoe") defer tester.Logout() r := tester.APITest("user_update"). diff --git a/utils/parse_period_test.go b/utils/parse_period_test.go --- a/utils/parse_period_test.go +++ b/utils/parse_period_test.go @@ -9,6 +9,7 @@ ) func TestParsePeriod(t *testing.T) { + t.Parallel() for _, tt := range []struct { period string expectedError string @@ -36,6 +37,7 @@ }, } { t.Run(tt.period, func(t *testing.T) { + t.Parallel() p, err := utils.ParsePeriod(tt.period) if err != nil { require.EqualError(t, err, tt.expectedError)