Created
March 28, 2025 15:23
-
-
Save jm96441n/74b6fa9b621cdd0c8d6548a6d2abd6d0 to your computer and use it in GitHub Desktop.
Testcontainers WithReuse and WithContainerName test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module test | |
| go 1.23.0 | |
| require ( | |
| github.com/testcontainers/testcontainers-go v0.36.0 | |
| github.com/testcontainers/testcontainers-go/modules/postgres v0.36.0 | |
| ) | |
| require ( | |
| dario.cat/mergo v1.0.1 // indirect | |
| github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect | |
| github.com/Microsoft/go-winio v0.6.2 // indirect | |
| github.com/cenkalti/backoff/v4 v4.2.1 // indirect | |
| github.com/containerd/log v0.1.0 // indirect | |
| github.com/containerd/platforms v0.2.1 // indirect | |
| github.com/cpuguy83/dockercfg v0.3.2 // indirect | |
| github.com/davecgh/go-spew v1.1.1 // indirect | |
| github.com/distribution/reference v0.6.0 // indirect | |
| github.com/docker/docker v28.0.1+incompatible // indirect | |
| github.com/docker/go-connections v0.5.0 // indirect | |
| github.com/docker/go-units v0.5.0 // indirect | |
| github.com/ebitengine/purego v0.8.2 // indirect | |
| github.com/felixge/httpsnoop v1.0.4 // indirect | |
| github.com/go-logr/logr v1.4.2 // indirect | |
| github.com/go-logr/stdr v1.2.2 // indirect | |
| github.com/go-ole/go-ole v1.2.6 // indirect | |
| github.com/gogo/protobuf v1.3.2 // indirect | |
| github.com/google/uuid v1.6.0 // indirect | |
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect | |
| github.com/klauspost/compress v1.17.4 // indirect | |
| github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect | |
| github.com/magiconair/properties v1.8.9 // indirect | |
| github.com/moby/docker-image-spec v1.3.1 // indirect | |
| github.com/moby/patternmatcher v0.6.0 // indirect | |
| github.com/moby/sys/sequential v0.5.0 // indirect | |
| github.com/moby/sys/user v0.1.0 // indirect | |
| github.com/moby/sys/userns v0.1.0 // indirect | |
| github.com/moby/term v0.5.0 // indirect | |
| github.com/morikuni/aec v1.0.0 // indirect | |
| github.com/opencontainers/go-digest v1.0.0 // indirect | |
| github.com/opencontainers/image-spec v1.1.1 // indirect | |
| github.com/pkg/errors v0.9.1 // indirect | |
| github.com/pmezard/go-difflib v1.0.0 // indirect | |
| github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect | |
| github.com/shirou/gopsutil/v4 v4.25.1 // indirect | |
| github.com/sirupsen/logrus v1.9.3 // indirect | |
| github.com/stretchr/testify v1.10.0 // indirect | |
| github.com/tklauser/go-sysconf v0.3.12 // indirect | |
| github.com/tklauser/numcpus v0.6.1 // indirect | |
| github.com/yusufpapurcu/wmi v1.2.4 // indirect | |
| go.opentelemetry.io/auto/sdk v1.1.0 // indirect | |
| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect | |
| go.opentelemetry.io/otel v1.35.0 // indirect | |
| go.opentelemetry.io/otel/metric v1.35.0 // indirect | |
| go.opentelemetry.io/otel/sdk v1.32.0 // indirect | |
| go.opentelemetry.io/otel/trace v1.35.0 // indirect | |
| golang.org/x/crypto v0.35.0 // indirect | |
| golang.org/x/sys v0.31.0 // indirect | |
| google.golang.org/grpc v1.70.0 // indirect | |
| google.golang.org/protobuf v1.36.5 // indirect | |
| gopkg.in/yaml.v3 v3.0.1 // indirect | |
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "context" | |
| "testing" | |
| "time" | |
| "github.com/testcontainers/testcontainers-go" | |
| "github.com/testcontainers/testcontainers-go/modules/postgres" | |
| "github.com/testcontainers/testcontainers-go/wait" | |
| ) | |
| // WithReuse will mark a container to be reused if it exists or create a new one if it doesn't. | |
| // It is used in conjunction with WithContainerName to ensure that the container is reused. | |
| func WithReuse() testcontainers.CustomizeRequestOption { | |
| return func(req *testcontainers.GenericContainerRequest) error { | |
| req.Reuse = true | |
| return nil | |
| } | |
| } | |
| // WithContainerName sets the name for the container request. | |
| func WithContainerName(name string) testcontainers.CustomizeRequestOption { | |
| return func(req *testcontainers.GenericContainerRequest) error { | |
| if name != "" { | |
| req.Name = name | |
| } | |
| return nil | |
| } | |
| } | |
| func setupDataStores(t *testing.T) { | |
| t.Helper() | |
| ctx := context.Background() | |
| _, err := postgres.Run( | |
| ctx, | |
| "cloud-services-docker-virtual.artifactory.hashicorp.engineering/postgres:16-alpine", | |
| postgres.WithDatabase("postgres"), | |
| postgres.WithUsername("postgres"), | |
| postgres.WithPassword("postgres"), | |
| testcontainers.WithWaitStrategy( | |
| wait.ForLog("database system is ready to accept connections"). | |
| WithOccurrence(2).WithStartupTimeout(10*time.Second)), | |
| WithReuse(), | |
| WithContainerName("pg-test"), | |
| ) | |
| if err != nil { | |
| t.Fatalf("failed to start postgres container: %v", err) | |
| } | |
| } | |
| func TestTheThing(t *testing.T) { | |
| t.Parallel() | |
| setupDataStores(t) | |
| time.Sleep(10 * time.Second) // Give some time to check that the database container only exists once. | |
| } | |
| func TestTheOtherThing(t *testing.T) { | |
| t.Parallel() | |
| setupDataStores(t) | |
| time.Sleep(10 * time.Second) // Give some time to check that the database container only exists once. | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment