Skip to content

Nginx

package nginx

import (
    "context"
    "time"

    "github.com/testcontainers/testcontainers-go"
    "github.com/testcontainers/testcontainers-go/wait"
)

type nginxContainer struct {
    testcontainers.Container
    URI string
}

func startContainer(ctx context.Context) (*nginxContainer, error) {
    ctr, err := testcontainers.Run(ctx, "nginx",
        testcontainers.WithExposedPorts("80/tcp"),
        testcontainers.WithReuseByName("nginx"),
        testcontainers.WithWaitStrategy(wait.ForHTTP("/").WithStartupTimeout(10*time.Second)),
    )
    var nginxC *nginxContainer
    if ctr != nil {
        nginxC = &nginxContainer{Container: ctr}
    }
    if err != nil {
        return nginxC, err
    }

    endpoint, err := ctr.PortEndpoint(ctx, "80", "http")
    if err != nil {
        return nginxC, err
    }

    nginxC.URI = endpoint
    return nginxC, nil
}
package nginx

import (
    "context"
    "net/http"
    "testing"

    "github.com/stretchr/testify/require"

    "github.com/testcontainers/testcontainers-go"
)

func TestIntegrationNginxLatestReturn(t *testing.T) {
    if testing.Short() {
        t.Skip("skipping integration test")
    }

    ctx := context.Background()

    nginxC, err := startContainer(ctx)
    testcontainers.CleanupContainer(t, nginxC)
    require.NoError(t, err)

    resp, err := http.Get(nginxC.URI)
    require.NoError(t, err)
    require.Equal(t, http.StatusOK, resp.StatusCode)
}