Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ linters:
- depguard
- errcheck
- errorlint
- forbidigo
- gocritic
- gocyclo
- gomodguard
Expand Down Expand Up @@ -38,6 +39,15 @@ linters:
desc: use stdlib slices package
- pkg: gopkg.in/yaml.v2
desc: compose-go uses yaml.v3
forbidigo:
analyze-types: true
forbid:
- pattern: 'context\.Background'
pkg: '^context$'
msg: "in tests, use t.Context() instead of context.Background()"
- pattern: 'context\.TODO'
pkg: '^context$'
msg: "in tests, use t.Context() instead of context.TODO()"
gocritic:
disabled-checks:
- paramTypeCombine
Expand Down Expand Up @@ -74,6 +84,10 @@ linters:
- third_party$
- builtin$
- examples$
rules:
- path-except: '_test\.go'
linters:
- forbidigo
issues:
max-issues-per-linter: 0
max-same-issues: 0
Expand Down
20 changes: 5 additions & 15 deletions cmd/compose/options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package compose

import (
"bytes"
"context"
"fmt"
"io"
"os"
Expand Down Expand Up @@ -214,10 +213,7 @@ func TestDisplayInterpolationVariables(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

// Create a temporary directory for the test
tmpDir, err := os.MkdirTemp("", "compose-test")
require.NoError(t, err)
defer func() { _ = os.RemoveAll(tmpDir) }()
tmpDir := t.TempDir()

// Create a temporary compose file
composeContent := `
Expand All @@ -231,8 +227,7 @@ services:
- UNSET_VAR # optional without default
`
composePath := filepath.Join(tmpDir, "docker-compose.yml")
err = os.WriteFile(composePath, []byte(composeContent), 0o644)
require.NoError(t, err)
require.NoError(t, os.WriteFile(composePath, []byte(composeContent), 0o644))

buf := new(bytes.Buffer)
cli := mocks.NewMockCli(ctrl)
Expand All @@ -244,16 +239,11 @@ services:
}

// Set up the context with necessary environment variables
ctx := context.Background()
_ = os.Setenv("TEST_VAR", "test-value")
_ = os.Setenv("API_KEY", "123456")
defer func() {
_ = os.Unsetenv("TEST_VAR")
_ = os.Unsetenv("API_KEY")
}()
t.Setenv("TEST_VAR", "test-value")
t.Setenv("API_KEY", "123456")

// Extract variables from the model
info, noVariables, err := extractInterpolationVariablesFromModel(ctx, cli, projectOptions, []string{})
info, noVariables, err := extractInterpolationVariablesFromModel(t.Context(), cli, projectOptions, []string{})
require.NoError(t, err)
require.False(t, noVariables)

Expand Down
6 changes: 1 addition & 5 deletions internal/desktop/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package desktop

import (
"context"
"os"
"testing"
"time"
Expand All @@ -34,17 +33,14 @@ func TestClientPing(t *testing.T) {
t.Skip("Skipping - COMPOSE_TEST_DESKTOP_ENDPOINT not defined")
}

ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)

client := NewClient(desktopEndpoint)
t.Cleanup(func() {
_ = client.Close()
})

now := time.Now()

ret, err := client.Ping(ctx)
ret, err := client.Ping(t.Context())
require.NoError(t, err)

serverTime := time.Unix(0, ret.ServerTime)
Expand Down
21 changes: 10 additions & 11 deletions pkg/compose/convergence_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package compose

import (
"context"
"fmt"
"strings"
"testing"
Expand Down Expand Up @@ -95,7 +94,7 @@ func TestServiceLinks(t *testing.T) {
c := testContainer("db", dbContainerName, false)
apiClient.EXPECT().ContainerList(gomock.Any(), containerListOptions).Return([]container.Summary{c}, nil)

links, err := tested.(*composeService).getLinks(context.Background(), testProject, s, 1)
links, err := tested.(*composeService).getLinks(t.Context(), testProject, s, 1)
assert.NilError(t, err)

assert.Equal(t, len(links), 3)
Expand All @@ -118,7 +117,7 @@ func TestServiceLinks(t *testing.T) {
c := testContainer("db", dbContainerName, false)

apiClient.EXPECT().ContainerList(gomock.Any(), containerListOptions).Return([]container.Summary{c}, nil)
links, err := tested.(*composeService).getLinks(context.Background(), testProject, s, 1)
links, err := tested.(*composeService).getLinks(t.Context(), testProject, s, 1)
assert.NilError(t, err)

assert.Equal(t, len(links), 3)
Expand All @@ -141,7 +140,7 @@ func TestServiceLinks(t *testing.T) {
c := testContainer("db", dbContainerName, false)
apiClient.EXPECT().ContainerList(gomock.Any(), containerListOptions).Return([]container.Summary{c}, nil)

links, err := tested.(*composeService).getLinks(context.Background(), testProject, s, 1)
links, err := tested.(*composeService).getLinks(t.Context(), testProject, s, 1)
assert.NilError(t, err)

assert.Equal(t, len(links), 3)
Expand All @@ -165,7 +164,7 @@ func TestServiceLinks(t *testing.T) {
c := testContainer("db", dbContainerName, false)
apiClient.EXPECT().ContainerList(gomock.Any(), containerListOptions).Return([]container.Summary{c}, nil)

links, err := tested.(*composeService).getLinks(context.Background(), testProject, s, 1)
links, err := tested.(*composeService).getLinks(t.Context(), testProject, s, 1)
assert.NilError(t, err)

assert.Equal(t, len(links), 4)
Expand Down Expand Up @@ -202,7 +201,7 @@ func TestServiceLinks(t *testing.T) {
}
apiClient.EXPECT().ContainerList(gomock.Any(), containerListOptionsOneOff).Return([]container.Summary{c}, nil)

links, err := tested.(*composeService).getLinks(context.Background(), testProject, s, 1)
links, err := tested.(*composeService).getLinks(t.Context(), testProject, s, 1)
assert.NilError(t, err)

assert.Equal(t, len(links), 3)
Expand Down Expand Up @@ -233,7 +232,7 @@ func TestWaitDependencies(t *testing.T) {
"db": {Condition: ServiceConditionRunningOrHealthy},
"redis": {Condition: ServiceConditionRunningOrHealthy},
}
assert.NilError(t, tested.(*composeService).waitDependencies(context.Background(), &project, "", dependencies, nil, 0))
assert.NilError(t, tested.(*composeService).waitDependencies(t.Context(), &project, "", dependencies, nil, 0))
})
t.Run("should skip dependencies with condition service_started", func(t *testing.T) {
dbService := types.ServiceConfig{Name: "db", Scale: intPtr(1)}
Expand All @@ -246,7 +245,7 @@ func TestWaitDependencies(t *testing.T) {
"db": {Condition: types.ServiceConditionStarted, Required: true},
"redis": {Condition: types.ServiceConditionStarted, Required: true},
}
assert.NilError(t, tested.(*composeService).waitDependencies(context.Background(), &project, "", dependencies, nil, 0))
assert.NilError(t, tested.(*composeService).waitDependencies(t.Context(), &project, "", dependencies, nil, 0))
})
}

Expand All @@ -260,7 +259,7 @@ func TestIsServiceHealthy(t *testing.T) {
assert.NilError(t, err)
cli.EXPECT().Client().Return(apiClient).AnyTimes()

ctx := context.Background()
ctx := t.Context()

t.Run("disabled healthcheck with fallback to running", func(t *testing.T) {
containerID := "test-container-id"
Expand Down Expand Up @@ -475,7 +474,7 @@ func TestCreateMobyContainer(t *testing.T) {
Aliases: []string{"bork-test-0"},
}))

_, err = tested.(*composeService).createMobyContainer(context.Background(), &project, service, "test", 0, nil, createOptions{
_, err = tested.(*composeService).createMobyContainer(t.Context(), &project, service, "test", 0, nil, createOptions{
Labels: make(types.Labels),
})
assert.NilError(t, err)
Expand Down Expand Up @@ -561,7 +560,7 @@ func TestCreateMobyContainer(t *testing.T) {
NetworkSettings: &container.NetworkSettings{},
}, nil)

_, err = tested.(*composeService).createMobyContainer(context.Background(), &project, service, "test", 0, nil, createOptions{
_, err = tested.(*composeService).createMobyContainer(t.Context(), &project, service, "test", 0, nil, createOptions{
Labels: make(types.Labels),
})
assert.NilError(t, err)
Expand Down
9 changes: 4 additions & 5 deletions pkg/compose/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package compose

import (
"context"
"os"
"path/filepath"
"sort"
Expand Down Expand Up @@ -164,7 +163,7 @@ func TestBuildContainerMountOptions(t *testing.T) {
}
mock.EXPECT().ImageInspect(gomock.Any(), "myProject-myService").AnyTimes().Return(image.InspectResponse{}, nil)

mounts, err := s.buildContainerMountOptions(context.TODO(), project, project.Services["myService"], inherit)
mounts, err := s.buildContainerMountOptions(t.Context(), project, project.Services["myService"], inherit)
sort.Slice(mounts, func(i, j int) bool {
return mounts[i].Target < mounts[j].Target
})
Expand All @@ -176,7 +175,7 @@ func TestBuildContainerMountOptions(t *testing.T) {
assert.Equal(t, mounts[2].VolumeOptions.Subpath, "etc")
assert.Equal(t, mounts[3].Target, "\\\\.\\pipe\\docker_engine")

mounts, err = s.buildContainerMountOptions(context.TODO(), project, project.Services["myService"], inherit)
mounts, err = s.buildContainerMountOptions(t.Context(), project, project.Services["myService"], inherit)
sort.Slice(mounts, func(i, j int) bool {
return mounts[i].Target < mounts[j].Target
})
Expand Down Expand Up @@ -435,7 +434,7 @@ volumes:
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p, err := composeloader.LoadWithContext(context.TODO(), composetypes.ConfigDetails{
p, err := composeloader.LoadWithContext(t.Context(), composetypes.ConfigDetails{
ConfigFiles: []composetypes.ConfigFile{
{
Filename: "test",
Expand All @@ -448,7 +447,7 @@ volumes:
})
assert.NilError(t, err)
s := &composeService{}
binds, mounts, err := s.buildContainerVolumes(context.TODO(), *p, p.Services["test"], nil)
binds, mounts, err := s.buildContainerVolumes(t.Context(), *p, p.Services["test"], nil)
assert.NilError(t, err)
assert.DeepEqual(t, tt.binds, binds)
assert.DeepEqual(t, tt.mounts, mounts)
Expand Down
17 changes: 4 additions & 13 deletions pkg/compose/dependencies_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,6 @@ func TestTraversalWithMultipleParents(t *testing.T) {
project.Services[name] = svc
}

ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)

svc := make(chan string, 10)
seen := make(map[string]int)
done := make(chan struct{})
Expand All @@ -84,7 +81,7 @@ func TestTraversalWithMultipleParents(t *testing.T) {
done <- struct{}{}
}()

err := InDependencyOrder(ctx, &project, func(ctx context.Context, service string) error {
err := InDependencyOrder(t.Context(), &project, func(ctx context.Context, service string) error {
svc <- service
return nil
})
Expand All @@ -99,11 +96,8 @@ func TestTraversalWithMultipleParents(t *testing.T) {
}

func TestInDependencyUpCommandOrder(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)

var order []string
err := InDependencyOrder(ctx, createTestProject(), func(ctx context.Context, service string) error {
err := InDependencyOrder(t.Context(), createTestProject(), func(ctx context.Context, service string) error {
order = append(order, service)
return nil
})
Expand All @@ -112,11 +106,8 @@ func TestInDependencyUpCommandOrder(t *testing.T) {
}

func TestInDependencyReverseDownCommandOrder(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)

var order []string
err := InReverseDependencyOrder(ctx, createTestProject(), func(ctx context.Context, service string) error {
err := InReverseDependencyOrder(t.Context(), createTestProject(), func(ctx context.Context, service string) error {
order = append(order, service)
return nil
})
Expand Down Expand Up @@ -429,7 +420,7 @@ func TestWith_RootNodesAndUp(t *testing.T) {
return nil
})
WithRootNodesAndDown(tt.nodes)(gt)
err := gt.visit(context.TODO(), graph)
err := gt.visit(t.Context(), graph)
assert.NilError(t, err)
sort.Strings(visited)
assert.DeepEqual(t, tt.want, visited)
Expand Down
17 changes: 8 additions & 9 deletions pkg/compose/down_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package compose

import (
"context"
"fmt"
"os"
"strings"
Expand Down Expand Up @@ -90,7 +89,7 @@ func TestDown(t *testing.T) {
api.EXPECT().NetworkRemove(gomock.Any(), "abc123").Return(nil)
api.EXPECT().NetworkRemove(gomock.Any(), "def456").Return(nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{})
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{})
assert.NilError(t, err)
}

Expand Down Expand Up @@ -139,7 +138,7 @@ func TestDownWithGivenServices(t *testing.T) {
api.EXPECT().NetworkInspect(gomock.Any(), "abc123", gomock.Any()).Return(network.Inspect{ID: "abc123"}, nil)
api.EXPECT().NetworkRemove(gomock.Any(), "abc123").Return(nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{
Services: []string{"service1", "not-running-service"},
})
assert.NilError(t, err)
Expand Down Expand Up @@ -175,7 +174,7 @@ func TestDownWithSpecifiedServiceButTheServicesAreNotRunning(t *testing.T) {
{ID: "def456", Name: "myProject_default", Labels: map[string]string{compose.NetworkLabel: "default"}},
}, nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{
Services: []string{"not-running-service1", "not-running-service2"},
})
assert.NilError(t, err)
Expand Down Expand Up @@ -227,7 +226,7 @@ func TestDownRemoveOrphans(t *testing.T) {
api.EXPECT().NetworkInspect(gomock.Any(), "abc123", gomock.Any()).Return(network.Inspect{ID: "abc123"}, nil)
api.EXPECT().NetworkRemove(gomock.Any(), "abc123").Return(nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{RemoveOrphans: true})
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{RemoveOrphans: true})
assert.NilError(t, err)
}

Expand Down Expand Up @@ -259,7 +258,7 @@ func TestDownRemoveVolumes(t *testing.T) {

api.EXPECT().VolumeRemove(gomock.Any(), "myProject_volume", true).Return(nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{Volumes: true})
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{Volumes: true})
assert.NilError(t, err)
}

Expand Down Expand Up @@ -346,7 +345,7 @@ func TestDownRemoveImages(t *testing.T) {

t.Log("-> docker compose down --rmi=local")
opts.Images = "local"
err = tested.Down(context.Background(), strings.ToLower(testProject), opts)
err = tested.Down(t.Context(), strings.ToLower(testProject), opts)
assert.NilError(t, err)

otherImagesToBeRemoved := []string{
Expand All @@ -361,7 +360,7 @@ func TestDownRemoveImages(t *testing.T) {

t.Log("-> docker compose down --rmi=all")
opts.Images = "all"
err = tested.Down(context.Background(), strings.ToLower(testProject), opts)
err = tested.Down(t.Context(), strings.ToLower(testProject), opts)
assert.NilError(t, err)
}

Expand Down Expand Up @@ -406,7 +405,7 @@ func TestDownRemoveImages_NoLabel(t *testing.T) {

api.EXPECT().ImageRemove(gomock.Any(), "testproject-service1:latest", image.RemoveOptions{}).Return(nil, nil)

err = tested.Down(context.Background(), strings.ToLower(testProject), compose.DownOptions{Images: "local"})
err = tested.Down(t.Context(), strings.ToLower(testProject), compose.DownOptions{Images: "local"})
assert.NilError(t, err)
}

Expand Down
Loading