Skip to content

Commit 80e57e1

Browse files
authored
feat: honour go toolchain's verbose flag to print out logs (#2624)
* chore: disable logging if the "-v" flag is not present * chore: print ryuk is disabled using the logger * fix: lint * fix: force verbosity in subprocess test * chore: include library version in banner * fix: terminate reusable container in tests * fix: remove container out-of-process in the right place * chore: refresh github * chore: simply check the reusable container is running without failures
1 parent 306f185 commit 80e57e1

File tree

5 files changed

+62
-27
lines changed

5 files changed

+62
-27
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ tidy-all:
1414
$(MAKE) -C examples tidy-examples
1515
$(MAKE) -C modules tidy-modules
1616

17-
## -------------------------------------
17+
## --------------------------------------
1818

1919
TCENV=tcvenv
2020
PYTHONBIN=./$(TCENV)/bin

docker_client.go

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/docker/docker/api/types/system"
1212
"github.com/docker/docker/client"
1313

14+
"github.com/testcontainers/testcontainers-go/internal"
1415
"github.com/testcontainers/testcontainers-go/internal/core"
1516
)
1617

@@ -57,6 +58,7 @@ func (c *DockerClient) Info(ctx context.Context) (system.Info, error) {
5758
API Version: %v
5859
Operating System: %v
5960
Total Memory: %v MB
61+
Testcontainers for Go Version: v%s
6062
Resolved Docker Host: %s
6163
Resolved Docker Socket Path: %s
6264
Test SessionID: %s
@@ -66,6 +68,7 @@ func (c *DockerClient) Info(ctx context.Context) (system.Info, error) {
6668
Logger.Printf(infoMessage, packagePath,
6769
dockerInfo.ServerVersion, c.Client.ClientVersion(),
6870
dockerInfo.OperatingSystem, dockerInfo.MemTotal/1024/1024,
71+
internal.Version,
6972
core.ExtractDockerHost(ctx),
7073
core.ExtractDockerSocket(ctx),
7174
core.SessionID(),

generic_test.go

+25-17
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package testcontainers
33
import (
44
"context"
55
"errors"
6-
"net/http"
76
"os"
87
"os/exec"
98
"strings"
109
"sync"
1110
"testing"
1211
"time"
1312

13+
"github.com/docker/docker/api/types/container"
14+
"github.com/docker/docker/api/types/filters"
1415
"github.com/stretchr/testify/require"
1516

1617
"github.com/testcontainers/testcontainers-go/wait"
@@ -23,6 +24,8 @@ const (
2324
func TestGenericReusableContainer(t *testing.T) {
2425
ctx := context.Background()
2526

27+
reusableContainerName := reusableContainerName + "_" + time.Now().Format("20060102150405")
28+
2629
n1, err := GenericContainer(ctx, GenericContainerRequest{
2730
ProviderType: providerType,
2831
ContainerRequest: ContainerRequest{
@@ -133,18 +136,37 @@ func TestGenericReusableContainerInSubprocess(t *testing.T) {
133136
// create containers in subprocesses, as "go test ./..." does.
134137
output := createReuseContainerInSubprocess(t)
135138

139+
t.Log(output)
136140
// check is reuse container with WaitingFor work correctly.
137141
require.True(t, strings.Contains(output, "⏳ Waiting for container id"))
138142
require.True(t, strings.Contains(output, "🔔 Container is ready"))
139143
}()
140144
}
141145

142146
wg.Wait()
147+
148+
cli, err := NewDockerClientWithOpts(context.Background())
149+
require.NoError(t, err)
150+
151+
f := filters.NewArgs(filters.KeyValuePair{Key: "name", Value: reusableContainerName})
152+
153+
ctrs, err := cli.ContainerList(context.Background(), container.ListOptions{
154+
All: true,
155+
Filters: f,
156+
})
157+
require.NoError(t, err)
158+
require.Len(t, ctrs, 1)
159+
160+
nginxC, err := containerFromDockerResponse(context.Background(), ctrs[0])
161+
require.NoError(t, err)
162+
163+
terminateContainerOnEnd(t, context.Background(), nginxC)
143164
}
144165

145166
func createReuseContainerInSubprocess(t *testing.T) string {
146-
cmd := exec.Command(os.Args[0], "-test.run=TestHelperContainerStarterProcess")
147-
cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
167+
// force verbosity in subprocesses, so that the output is printed
168+
cmd := exec.Command(os.Args[0], "-test.run=TestHelperContainerStarterProcess", "-test.v=true")
169+
cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")
148170

149171
output, err := cmd.CombinedOutput()
150172
require.NoError(t, err, string(output))
@@ -174,18 +196,4 @@ func TestHelperContainerStarterProcess(t *testing.T) {
174196
})
175197
require.NoError(t, err)
176198
require.True(t, nginxC.IsRunning())
177-
178-
origin, err := nginxC.PortEndpoint(ctx, nginxDefaultPort, "http")
179-
require.NoError(t, err)
180-
181-
// check is reuse container with WaitingFor work correctly.
182-
req, err := http.NewRequestWithContext(ctx, http.MethodGet, origin, nil)
183-
require.NoError(t, err)
184-
req.Close = true
185-
186-
resp, err := http.DefaultClient.Do(req)
187-
require.NoError(t, err)
188-
defer resp.Body.Close()
189-
190-
require.Equal(t, http.StatusOK, resp.StatusCode)
191199
}

internal/config/config.go

-9
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,6 @@ type Config struct {
4141
func Read() Config {
4242
tcConfigOnce.Do(func() {
4343
tcConfig = read()
44-
45-
if tcConfig.RyukDisabled {
46-
ryukDisabledMessage := `
47-
**********************************************************************************************
48-
Ryuk has been disabled for the current execution. This can cause unexpected behavior in your environment.
49-
More on this: https://golang.testcontainers.org/features/garbage_collector/
50-
**********************************************************************************************`
51-
fmt.Println(ryukDisabledMessage)
52-
}
5344
})
5445

5546
return tcConfig

logger.go

+33
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,40 @@ import (
44
"context"
55
"log"
66
"os"
7+
"strings"
78
"testing"
89

910
"github.com/docker/docker/client"
11+
12+
"github.com/testcontainers/testcontainers-go/internal/config"
1013
)
1114

1215
// Logger is the default log instance
1316
var Logger Logging = log.New(os.Stderr, "", log.LstdFlags)
1417

18+
func init() {
19+
verbose := false
20+
for _, arg := range os.Args {
21+
if strings.EqualFold(arg, "-test.v=true") || strings.EqualFold(arg, "-v") {
22+
verbose = true
23+
break
24+
}
25+
}
26+
27+
if !verbose {
28+
Logger = &noopLogger{}
29+
}
30+
31+
if config.Read().RyukDisabled {
32+
ryukDisabledMessage := `
33+
**********************************************************************************************
34+
Ryuk has been disabled for the current execution. This can cause unexpected behavior in your environment.
35+
More on this: https://golang.testcontainers.org/features/garbage_collector/
36+
**********************************************************************************************`
37+
Logger.Printf(ryukDisabledMessage)
38+
}
39+
}
40+
1541
// Validate our types implement the required interfaces.
1642
var (
1743
_ Logging = (*log.Logger)(nil)
@@ -25,6 +51,13 @@ type Logging interface {
2551
Printf(format string, v ...interface{})
2652
}
2753

54+
type noopLogger struct{}
55+
56+
// Printf implements Logging.
57+
func (n noopLogger) Printf(format string, v ...interface{}) {
58+
// NOOP
59+
}
60+
2861
// Deprecated: this function will be removed in a future release
2962
// LogDockerServerInfo logs the docker server info using the provided logger and Docker client
3063
func LogDockerServerInfo(ctx context.Context, client client.APIClient, logger Logging) {

0 commit comments

Comments
 (0)