diff --git a/.golangci.yml b/.golangci.yml index 02d5a5469..68867cfcb 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -22,6 +22,7 @@ linters: - nakedret - nolintlint - staticcheck + - testifylint - typecheck - unconvert - unparam @@ -71,3 +72,11 @@ issues: # golangci hides some golint warnings (the warning about exported things # without documentation for example), this will make it show them anyway. exclude-use-default: false + # Maximum issues count per one linter. + # Set to 0 to disable. + # Default: 50 + max-issues-per-linter: 0 + # Maximum count of issues with the same text. + # Set to 0 to disable. + # Default: 3 + max-same-issues: 0 diff --git a/cmd/compose/ps_test.go b/cmd/compose/ps_test.go index b0eb539f1..79f1b49ac 100644 --- a/cmd/compose/ps_test.go +++ b/cmd/compose/ps_test.go @@ -27,6 +27,7 @@ import ( "github.com/docker/compose/v2/pkg/api" "github.com/docker/compose/v2/pkg/mocks" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" ) @@ -74,13 +75,13 @@ func TestPsTable(t *testing.T) { cli.EXPECT().Out().Return(stdout).AnyTimes() cli.EXPECT().ConfigFile().Return(&configfile.ConfigFile{}).AnyTimes() err = runPs(ctx, cli, backend, nil, opts) - assert.NoError(t, err) + require.NoError(t, err) _, err = f.Seek(0, 0) - assert.NoError(t, err) + require.NoError(t, err) output, err := os.ReadFile(out) - assert.NoError(t, err) + require.NoError(t, err) assert.Contains(t, string(output), "8080/tcp, 8443/tcp") } diff --git a/cmd/compose/viz_test.go b/cmd/compose/viz_test.go index 9691e1db3..f4a90501e 100644 --- a/cmd/compose/viz_test.go +++ b/cmd/compose/viz_test.go @@ -17,10 +17,10 @@ package compose import ( - "fmt" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestPreferredIndentationStr(t *testing.T) { @@ -83,10 +83,12 @@ func TestPreferredIndentationStr(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := preferredIndentationStr(tt.args.size, tt.args.useSpace) - if tt.wantErr && assert.NotNilf(t, err, fmt.Sprintf("preferredIndentationStr(%v, %v)", tt.args.size, tt.args.useSpace)) { - return + if tt.wantErr { + require.Errorf(t, err, "preferredIndentationStr(%v, %v)", tt.args.size, tt.args.useSpace) + } else { + require.NoError(t, err) + assert.Equalf(t, tt.want, got, "preferredIndentationStr(%v, %v)", tt.args.size, tt.args.useSpace) } - assert.Equalf(t, tt.want, got, "preferredIndentationStr(%v, %v)", tt.args.size, tt.args.useSpace) }) } } diff --git a/pkg/compose/viz_test.go b/pkg/compose/viz_test.go index 7093de51d..ba420d123 100644 --- a/pkg/compose/viz_test.go +++ b/pkg/compose/viz_test.go @@ -23,6 +23,7 @@ import ( "github.com/compose-spec/compose-go/v2/types" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.uber.org/mock/gomock" compose "github.com/docker/compose/v2/pkg/api" @@ -128,7 +129,7 @@ func TestViz(t *testing.T) { IncludeImageName: false, IncludeNetworks: false, }) - assert.NoError(t, err, "viz command failed") + require.NoError(t, err, "viz command failed") // check indentation assert.Contains(t, graphStr, "\n ", graphStr) @@ -187,7 +188,7 @@ func TestViz(t *testing.T) { IncludeImageName: true, IncludeNetworks: true, }) - assert.NoError(t, err, "viz command failed") + require.NoError(t, err, "viz command failed") // check indentation assert.Contains(t, graphStr, "\n\t", graphStr) diff --git a/pkg/e2e/ps_test.go b/pkg/e2e/ps_test.go index b9d6cd44f..702c273f1 100644 --- a/pkg/e2e/ps_test.go +++ b/pkg/e2e/ps_test.go @@ -33,18 +33,17 @@ func TestPs(t *testing.T) { const projectName = "e2e-ps" res := c.RunDockerComposeCmd(t, "-f", "./fixtures/ps-test/compose.yaml", "--project-name", projectName, "up", "-d") - if assert.NoError(t, res.Error) { - t.Cleanup(func() { - _ = c.RunDockerComposeCmd(t, "--project-name", projectName, "down") - }) - } + require.NoError(t, res.Error) + t.Cleanup(func() { + _ = c.RunDockerComposeCmd(t, "--project-name", projectName, "down") + }) assert.Contains(t, res.Combined(), "Container e2e-ps-busybox-1 Started", res.Combined()) t.Run("table", func(t *testing.T) { res = c.RunDockerComposeCmd(t, "-f", "./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps") lines := strings.Split(res.Stdout(), "\n") - assert.Equal(t, 4, len(lines)) + assert.Len(t, lines, 4) count := 0 for _, line := range lines[1:3] { if strings.Contains(line, "e2e-ps-busybox-1") { @@ -77,12 +76,12 @@ func TestPs(t *testing.T) { } count := 0 - assert.Equal(t, 2, len(output)) + assert.Len(t, output, 2) for _, service := range output { assert.Equal(t, projectName, service.Project) publishers := service.Publishers if service.Name == "e2e-ps-busybox-1" { - assert.Equal(t, 1, len(publishers)) + assert.Len(t, publishers, 1) assert.Equal(t, api.PortPublishers{ { URL: "127.0.0.1", @@ -94,7 +93,7 @@ func TestPs(t *testing.T) { count++ } if service.Name == "e2e-ps-nginx-1" { - assert.Equal(t, 3, len(publishers)) + assert.Len(t, publishers, 3) assert.Equal(t, api.PortPublishers{ {TargetPort: 80, Protocol: "tcp"}, {TargetPort: 443, Protocol: "tcp"}, @@ -109,20 +108,20 @@ func TestPs(t *testing.T) { t.Run("ps --all", func(t *testing.T) { res := c.RunDockerComposeCmd(t, "--project-name", projectName, "stop") - assert.NoError(t, res.Error) + require.NoError(t, res.Error) res = c.RunDockerComposeCmd(t, "-f", "./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps") lines := strings.Split(res.Stdout(), "\n") - assert.Equal(t, 2, len(lines)) + assert.Len(t, lines, 2) res = c.RunDockerComposeCmd(t, "-f", "./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps", "--all") lines = strings.Split(res.Stdout(), "\n") - assert.Equal(t, 4, len(lines)) + assert.Len(t, lines, 4) }) t.Run("ps unknown", func(t *testing.T) { res := c.RunDockerComposeCmd(t, "--project-name", projectName, "stop") - assert.NoError(t, res.Error) + require.NoError(t, res.Error) res = c.RunDockerComposeCmd(t, "-f", "./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps", "nginx") res.Assert(t, icmd.Success) diff --git a/pkg/e2e/up_test.go b/pkg/e2e/up_test.go index 83ce235a1..5f4fb9c0c 100644 --- a/pkg/e2e/up_test.go +++ b/pkg/e2e/up_test.go @@ -98,7 +98,7 @@ func TestUpDependenciesNotStopped(t *testing.T) { if exitErr.ExitCode() == -1 { t.Fatalf("`compose up` was killed: %v", err) } - require.EqualValues(t, exitErr.ExitCode(), 130) + require.EqualValues(t, 130, exitErr.ExitCode()) } RequireServiceState(t, c, "app", "exited") diff --git a/pkg/watch/ephemeral_test.go b/pkg/watch/ephemeral_test.go index 1d9525723..4b314ac51 100644 --- a/pkg/watch/ephemeral_test.go +++ b/pkg/watch/ephemeral_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/docker/compose/v2/pkg/watch" ) @@ -36,14 +37,12 @@ func TestEphemeralPathMatcher(t *testing.T) { matcher := watch.EphemeralPathMatcher() for _, p := range ignored { ok, err := matcher.Matches(p) - if assert.NoErrorf(t, err, "Matching %s", p) { - assert.Truef(t, ok, "Path %s should have matched", p) - } + require.NoErrorf(t, err, "Matching %s", p) + assert.Truef(t, ok, "Path %s should have matched", p) } const includedPath = "normal.txt" ok, err := matcher.Matches(includedPath) - if assert.NoErrorf(t, err, "Matching %s", includedPath) { - assert.Falsef(t, ok, "Path %s should NOT have matched", includedPath) - } + require.NoErrorf(t, err, "Matching %s", includedPath) + assert.Falsef(t, ok, "Path %s should NOT have matched", includedPath) } diff --git a/pkg/watch/notify_test.go b/pkg/watch/notify_test.go index 0185923b5..116d9166e 100644 --- a/pkg/watch/notify_test.go +++ b/pkg/watch/notify_test.go @@ -39,15 +39,15 @@ func TestWindowsBufferSize(t *testing.T) { defer os.Setenv(WindowsBufferSizeEnvVar, orig) //nolint:errcheck err := os.Setenv(WindowsBufferSizeEnvVar, "") - assert.Nil(t, err) + require.NoError(t, err) assert.Equal(t, defaultBufferSize, DesiredWindowsBufferSize()) err = os.Setenv(WindowsBufferSizeEnvVar, "a") - assert.Nil(t, err) + require.NoError(t, err) assert.Equal(t, defaultBufferSize, DesiredWindowsBufferSize()) err = os.Setenv(WindowsBufferSizeEnvVar, "10") - assert.Nil(t, err) + require.NoError(t, err) assert.Equal(t, 10, DesiredWindowsBufferSize()) } diff --git a/pkg/watch/paths_test.go b/pkg/watch/paths_test.go index d906b7031..72b707e51 100644 --- a/pkg/watch/paths_test.go +++ b/pkg/watch/paths_test.go @@ -21,17 +21,18 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestGreatestExistingAncestor(t *testing.T) { f := NewTempDirFixture(t) p, err := greatestExistingAncestor(f.Path()) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, f.Path(), p) p, err = greatestExistingAncestor(f.JoinPath("missing")) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, f.Path(), p) missingTopLevel := "/missingDir/a/b/c"