Categorygithub.com/yannikbramkamp/testcontainers-go
modulepackage
0.9.2
Repository: https://github.com/yannikbramkamp/testcontainers-go.git
Documentation: pkg.go.dev

# README

Main pipeline Build Status Go Report Card GoDoc Reference

When I was working on a Zipkin PR I discovered a nice Java library called Testcontainers.

It provides an easy and clean API over the go docker sdk to run, terminate and connect to containers in your tests.

I found myself comfortable programmatically writing the containers I need to run an integration/smoke tests. So I started porting this library in Go.

This is an example:

package main

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

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

func TestNginxLatestReturn(t *testing.T) {
	ctx := context.Background()
	req := testcontainers.ContainerRequest{
		Image:        "nginx",
		ExposedPorts: []string{"80/tcp"},
		WaitingFor:   wait.ForHTTP("/"),
	}
	nginxC, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
		ContainerRequest: req,
		Started:          true,
	})
	if err != nil {
		t.Error(err)
	}
	defer nginxC.Terminate(ctx)
	ip, err := nginxC.Host(ctx)
	if err != nil {
		t.Error(err)
	}
	port, err := nginxC.MappedPort(ctx, "80")
	if err != nil {
		t.Error(err)
	}
	resp, err := http.Get(fmt.Sprintf("http://%s:%s", ip, port.Port()))
	if resp.StatusCode != http.StatusOK {
		t.Errorf("Expected status code %d. Got %d.", http.StatusOK, resp.StatusCode)
	}
}

This is a simple example, you can create one container in my case using the nginx image. You can get its IP ip, err := nginxC.GetContainerIpAddress(ctx) and you can use it to make a GET: resp, err := http.Get(fmt.Sprintf("http://%s", ip))

To clean your environment you can defer the container termination defer nginxC.Terminate(ctx, t). t is *testing.T and it is used to notify is the defer failed marking the test as failed.

Documentation

The documentation lives in ./docs and it is rendered at golang.testcontainers.org.

# Packages

No description provided by the author
No description provided by the author

# Functions

GenericContainer creates a generic container with parameters.
GenericNetwork creates a generic network with parameters.
NewDockerProvider creates a Docker provider with the EnvClient.
NewLocalDockerCompose returns an instance of the local Docker Compose, using an array of Docker Compose file paths and an identifier for the Compose execution.
NewReaper creates a Reaper with a sessionID to identify containers and a provider to use.
SkipIfProviderIsNotHealthy is a utility function capable of skipping tests if the provider is not healthy, or running at all.

# Constants

Bridge network name (as well as driver).
Docker is default = 0.
Default network name when bridge is not available.
No description provided by the author
StderrLog is the log type for STDERR.
StdoutLog is the log type for STDOUT.
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

ContainerRequest represents the parameters used to get a running container.
DockerContainer represents a container started using Docker.
DockerNetwork represents a network started using Docker.
DockerProvider implements the ContainerProvider interface.
ExecError is super struct that holds any information about an execution error, so the client code can handle the result.
FromDockerfile represents the parameters needed to build an image from a Dockerfile rather than using a pre-built one.
GenericContainerRequest represents parameters to a generic container.
GenericNetworkRequest represents parameters to a generic network.
LocalDockerCompose represents a Docker Compose execution using local binary docker-compose or docker-compose.exe, depending on the underlying platform.
Log represents a message that was created by a process, LogType is either "STDOUT" or "STDERR", Content is the byte contents of the message itself.
NetworkRequest represents the parameters used to get a network.
Reaper is used to start a sidecar container that cleans up resources.

# Interfaces

Container allows getting info about and controlling a single container instance.
ContainerProvider allows the creation of containers on an arbitrary system.
DeprecatedContainer shows methods that were supported before, but are now deprecated Deprecated: Use Container.
DockerCompose defines the contract for running Docker Compose.
GenericProvider represents an abstraction for container and network providers.
ImageBuildInfo defines what is needed to build an image.
LogConsumer represents any object that can handle a Log, it is up to the LogConsumer instance what to do with the log.
Network allows getting info about a single network instance.
NetworkProvider allows the creation of networks on an arbitrary system.
ReaperProvider represents a provider for the reaper to run itself with The ContainerProvider interface should usually satisfy this as well, so it is pluggable.

# Type aliases

ProviderType is an enum for the possible providers.