Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -14,6 +14,7 @@ linters:
- gocritic
- 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