testcontainers / testcontainers-go

Testcontainers for Go is a Go package that makes it simple to create and clean up container-based dependencies for automated integration/smoke tests. The clean, easy-to-use API enables developers to programmatically define containers that should be run as part of a test and clean up those resources when the test is done.
https://golang.testcontainers.org
MIT License
3.64k stars 500 forks source link

[Bug]: -v enable logs which is not intuitive to control #2874

Open apstndb opened 3 days ago

apstndb commented 3 days ago

Testcontainers version

0.34.0

Using the latest Testcontainers version?

Yes

Host OS

macOS

Host arch

ARM

Go version

1.23.2

Docker version

Client: Version: 27.1.1 API version: 1.46 Go version: go1.21.12 Git commit: 6312585 Built: Tue Jul 23 19:54:12 2024 OS/Arch: darwin/arm64 Context: desktop-linux

Server: Docker Desktop 4.33.0 (160616) Engine: Version: 27.1.1 API version: 1.46 (minimum version 1.24) Go version: go1.21.12 Git commit: cc13f95 Built: Tue Jul 23 19:57:14 2024 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.7.19 GitCommit: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41 runc: Version: 1.7.19 GitCommit: v1.1.13-0-g58aa920 docker-init: Version: 0.19.0 GitCommit: de40ad0

Docker info

Client: Version: 27.1.1 Context: desktop-linux Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.16.1-desktop.1 Path: /Users/apstndb/.docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.29.1-desktop.1 Path: /Users/apstndb/.docker/cli-plugins/docker-compose debug: Get a shell into any image or container (Docker Inc.) Version: 0.0.34 Path: /Users/apstndb/.docker/cli-plugins/docker-debug desktop: Docker Desktop commands (Alpha) (Docker Inc.) Version: v0.0.14 Path: /Users/apstndb/.docker/cli-plugins/docker-desktop dev: Docker Dev Environments (Docker Inc.) Version: v0.1.2 Path: /Users/apstndb/.docker/cli-plugins/docker-dev extension: Manages Docker extensions (Docker Inc.) Version: v0.2.25 Path: /Users/apstndb/.docker/cli-plugins/docker-extension feedback: Provide feedback, right in your terminal! (Docker Inc.) Version: v1.0.5 Path: /Users/apstndb/.docker/cli-plugins/docker-feedback init: Creates Docker-related starter files for your project (Docker Inc.) Version: v1.3.0 Path: /Users/apstndb/.docker/cli-plugins/docker-init sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.) Version: 0.6.0 Path: /Users/apstndb/.docker/cli-plugins/docker-sbom scout: Docker Scout (Docker Inc.) Version: v1.11.0 Path: /Users/apstndb/.docker/cli-plugins/docker-scout

Server: Containers: 3 Running: 3 Paused: 0 Stopped: 0 Images: 17 Server Version: 27.1.1 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Using metacopy: false Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41 runc version: v1.1.13-0-g58aa920 init version: de40ad0 Security Options: seccomp Profile: unconfined cgroupns Kernel Version: 6.10.0-linuxkit Operating System: Docker Desktop OSType: linux Architecture: aarch64 CPUs: 8 Total Memory: 7.655GiB Name: docker-desktop ID: 55defb00-489f-4e5d-8f0c-4ade953f95db Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 No Proxy: hubproxy.docker.internal Labels: com.docker.desktop.address=unix:///Users/apstndb/Library/Containers/com.docker.docker/Data/docker-cli.sock Experimental: false Insecure Registries: hubproxy.docker.internal:5555 127.0.0.0/8 Live Restore Enabled: false

What happened?

Background I want to use testcontainers outside of go test, in order to launch CLI with Cloud Spanner Emulator container. https://github.com/apstndb/spanner-mycli?tab=readme-ov-file#embedded-cloud-spanner-emulator

I have noticed -v flag is handled by testcontainers to control detail logs. (https://github.com/testcontainers/testcontainers-go/blob/ac572ca322318772acade1c801b0cdb6de0c3f8f/logger.go#L13-L18) That is unexpected behaviour for me so I try to suppress their logs, but I have noticed it is not easy.

Part of these logs are able to be suppressed by WithLogger() as like:

// need to implement no op logger because there are no exported implementation.
type noopLogger struct{}

func (n noopLogger) Printf(format string, v ...interface{}) {
    // NOOP
}

...

testcontainers.WithLogger(&noopLogger{})

But some logs are still emitted.(attached as "Relevant log output")

I have finally needed to override testcontainers.Logger global variable as like:

testcontainers.Logger = &noopLogger{}

I think it is not intuitive behavior, and there should be an easier way to fix this.

Relevant log output

2024/11/05 19:08:24 github.com/testcontainers/testcontainers-go - Connected to docker: Server Version: 27.1.1 API Version: 1.46 Operating System: Docker Desktop Total Memory: 7839 MB Labels: com.docker.desktop.address=unix:///Users/apstndb/Library/Containers/com.docker.docker/Data/docker-cli.sock Testcontainers for Go Version: v0.34.0 Resolved Docker Host: unix:///var/run/docker.sock Resolved Docker Socket Path: /var/run/docker.sock Test SessionID: cbde03b675d4e638d0c164e7724ae475f973cf2f2c6762b4b284b553d05e3612 Test ProcessID: 95b332b0-992e-45b5-b494-fea5cc02cc6a

Additional information

No response

apstndb commented 2 days ago

I believe it is better to respect testing.Testing() and testing.Verbose() rather than seeing -v or -vtest.v