Skip to content
Open
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
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ linters:
- govet
- misspell
- nakedret
- noctx
- nolintlint
- perfsprint
- revive
Expand Down
12 changes: 7 additions & 5 deletions docker_auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ func TestBuildContainerFromDockerfileWithDockerAuthConfig(t *testing.T) {
// using the same credentials as in the Docker Registry
setAuthConfig(t, registryHost, "testuser", "testpassword")

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

redisC, err := Run(ctx, "",
WithDockerfile(FromDockerfile{
Expand All @@ -223,7 +223,7 @@ func TestBuildContainerFromDockerfileShouldFailWithWrongDockerAuthConfig(t *test
// using different credentials than in the Docker Registry
setAuthConfig(t, registryHost, "foo", "bar")

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

redisC, err := Run(ctx, "",
WithDockerfile(FromDockerfile{
Expand All @@ -247,7 +247,7 @@ func TestCreateContainerFromPrivateRegistry(t *testing.T) {
// using the same credentials as in the Docker Registry
setAuthConfig(t, registryHost, "testuser", "testpassword")

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

redisContainer, err := Run(ctx, registryHost+"/redis:5.0-alpine", WithAlwaysPull(), WithExposedPorts("6379/tcp"), WithWaitStrategy(wait.ForLog("Ready to accept connections")))
CleanupContainer(t, redisContainer)
Expand All @@ -256,7 +256,7 @@ func TestCreateContainerFromPrivateRegistry(t *testing.T) {

func prepareLocalRegistryWithAuth(t *testing.T) string {
t.Helper()
ctx := context.Background()
ctx := t.Context()
wd, err := os.Getwd()
require.NoError(t, err)
// copyDirectoryToContainer {
Expand Down Expand Up @@ -338,8 +338,10 @@ func localAddress(t *testing.T) string {
if os.Getenv("WSL_DISTRO_NAME") == "" {
return "localhost"
}
ctx := context.Background()

conn, err := net.Dial("udp", "golang.org:80")
d := &net.Dialer{}
conn, err := d.DialContext(ctx, "udp", "golang.org:80")
require.NoError(t, err)
defer conn.Close()

Expand Down
104 changes: 82 additions & 22 deletions docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,12 @@ func TestContainerWithHostNetworkOptions(t *testing.T) {
endpoint, err := nginxC.PortEndpoint(ctx, nginxHighPort, "http")
require.NoErrorf(t, err, "Expected server endpoint")

_, err = http.Get(endpoint)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoErrorf(t, err, "Expected OK response")
require.NoError(t, resp.Body.Close())
}

func TestContainerWithHostNetworkOptions_UseExposePortsFromImageConfigs(t *testing.T) {
Expand All @@ -103,11 +107,14 @@ func TestContainerWithHostNetworkOptions_UseExposePortsFromImageConfigs(t *testi
endpoint, err := nginxC.Endpoint(ctx, "http")
require.NoErrorf(t, err, "Expected server endpoint")

resp, err := http.Get(endpoint)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}

func TestContainerWithHostNetwork(t *testing.T) {
Expand Down Expand Up @@ -140,14 +147,22 @@ func TestContainerWithHostNetwork(t *testing.T) {
require.NoErrorf(t, err, "Expected port endpoint %s", portEndpoint)
t.Log(portEndpoint)

_, err = http.Get(portEndpoint)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, portEndpoint, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoErrorf(t, err, "Expected OK response")
require.NoError(t, resp.Body.Close())

host, err := nginxC.Host(ctx)
require.NoErrorf(t, err, "Expected host %s", host)

_, err = http.Get("http://" + host + ":8080")
req, err = http.NewRequestWithContext(ctx, http.MethodGet, "http://"+host+":8080", http.NoBody)
require.NoError(t, err)

resp, err = http.DefaultClient.Do(req)
require.NoErrorf(t, err, "Expected OK response")
require.NoError(t, resp.Body.Close())
}

func TestContainerReturnItsContainerID(t *testing.T) {
Expand Down Expand Up @@ -318,20 +333,26 @@ func TestTwoContainersExposingTheSamePort(t *testing.T) {
endpointA, err := nginxA.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)

resp, err := http.Get(endpointA)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpointA, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())

endpointB, err := nginxB.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)

resp, err = http.Get(endpointB)
req, err = http.NewRequestWithContext(ctx, http.MethodGet, endpointB, http.NoBody)
require.NoError(t, err)

resp, err = http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}

func TestContainerCreation(t *testing.T) {
Expand All @@ -347,11 +368,14 @@ func TestContainerCreation(t *testing.T) {
endpoint, err := nginxC.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)

resp, err := http.Get(endpoint)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())

networkIP, err := nginxC.ContainerIP(ctx)
require.NoError(t, err)
Expand Down Expand Up @@ -408,11 +432,14 @@ func TestContainerCreationWithName(t *testing.T) {
endpoint, err := nginxC.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)

resp, err := http.Get(endpoint)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}

func TestContainerCreationAndWaitForListeningPortLongEnough(t *testing.T) {
Expand All @@ -428,11 +455,15 @@ func TestContainerCreationAndWaitForListeningPortLongEnough(t *testing.T) {

origin, err := nginxC.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)
resp, err := http.Get(origin)

req, err := http.NewRequestWithContext(ctx, http.MethodGet, origin, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}

func TestContainerCreationTimesOut(t *testing.T) {
Expand All @@ -459,11 +490,15 @@ func TestContainerRespondsWithHttp200ForIndex(t *testing.T) {

origin, err := nginxC.PortEndpoint(ctx, nginxDefaultPort, "http")
require.NoError(t, err)
resp, err := http.Get(origin)

req, err := http.NewRequestWithContext(ctx, http.MethodGet, origin, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

require.Equalf(t, http.StatusOK, resp.StatusCode, "Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}

func TestContainerCreationTimesOutWithHttp(t *testing.T) {
Expand Down Expand Up @@ -529,14 +564,17 @@ func Test_BuildContainerFromDockerfileWithBuildArgs(t *testing.T) {
ep, err := c.Endpoint(ctx, "http")
require.NoError(t, err)

resp, err := http.Get(ep + "/env")
req, err := http.NewRequestWithContext(ctx, http.MethodGet, ep+"/env", http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()

body, err := io.ReadAll(resp.Body)
require.NoError(t, err)
require.Equal(t, http.StatusAccepted, resp.StatusCode)
require.Equal(t, ba, string(body))
require.NoError(t, resp.Body.Close())
}

func Test_BuildContainerFromDockerfileWithBuildLog(t *testing.T) {
Expand Down Expand Up @@ -842,9 +880,31 @@ func ExampleContainer_MappedPort() {
}

// buildingAddresses {
ip, _ := nginxC.Host(ctx)
port, _ := nginxC.MappedPort(ctx, "80")
_, _ = http.Get(fmt.Sprintf("http://%s:%s", ip, port.Port()))
ip, err := nginxC.Host(ctx)
if err != nil {
log.Printf("failed to get container host: %s", err)
return
}
port, err := nginxC.MappedPort(ctx, "80")
if err != nil {
log.Printf("failed to get container mapped port: %s", err)
return
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf("http://%s:%s", ip, port.Port()), http.NoBody)
if err != nil {
log.Printf("failed to create request: %s", err)
return
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Printf("failed to do request: %s", err)
return
}
if resp.StatusCode != http.StatusOK {
log.Printf("expected status code %d, got %d", http.StatusOK, resp.StatusCode)
return
}
defer resp.Body.Close()
// }

state, err := nginxC.State(ctx)
Expand Down
9 changes: 8 additions & 1 deletion docs/features/creating_container.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ import (
"net/http"
"testing"

"github.com/stretchr/testify/require"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
)
Expand Down Expand Up @@ -126,8 +127,14 @@ func TestIntegrationNginxLatestReturn(t *testing.T) {
testcontainers.CleanupContainer(t, nginxC)
require.NoError(t, err)

resp, err := http.Get(nginxC.URI)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, nginxC.URI, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
Comment on lines +130 to +133
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: this is adding a lot of boiler plate, should we a help to eliminate that?

require.NoError(t, err)

require.Equal(t, http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}
```

Expand Down
7 changes: 6 additions & 1 deletion examples/nginx/nginx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ func TestIntegrationNginxLatestReturn(t *testing.T) {
testcontainers.CleanupContainer(t, nginxC)
require.NoError(t, err)

resp, err := http.Get(nginxC.URI)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, nginxC.URI, http.NoBody)
require.NoError(t, err)

resp, err := http.DefaultClient.Do(req)
require.NoError(t, err)

require.Equal(t, http.StatusOK, resp.StatusCode)
require.NoError(t, resp.Body.Close())
}
2 changes: 1 addition & 1 deletion generic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ func TestGenericReusableContainerInSubprocess(t *testing.T) {
func createReuseContainerInSubprocess(t *testing.T) string {
t.Helper()
// force verbosity in subprocesses, so that the output is printed
cmd := exec.Command(os.Args[0], "-test.run=TestHelperContainerStarterProcess", "-test.v=true")
cmd := exec.CommandContext(t.Context(), os.Args[0], "-test.run=TestHelperContainerStarterProcess", "-test.v=true")
cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")

output, err := cmd.CombinedOutput()
Expand Down
2 changes: 1 addition & 1 deletion internal/core/docker_host.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ var (
// see https://github.com/testcontainers/testcontainers-java/blob/main/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java#L46
func DefaultGatewayIP() (string, error) {
// see https://github.com/testcontainers/testcontainers-java/blob/3ad8d80e2484864e554744a4800a81f6b7982168/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java#L27
cmd := exec.Command("sh", "-c", "ip route|awk '/default/ { print $3 }'")
cmd := exec.CommandContext(context.Background(), "sh", "-c", "ip route|awk '/default/ { print $3 }'")
stdout, err := cmd.Output()
if err != nil {
return "", errors.New("failed to detect docker host")
Expand Down
Loading
Loading