github.com/tommi2day/gomodules@v1.13.2-0.20240423190010-b7d55d252a27/common/dockertest_helper.go (about)

     1  package common
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/ory/dockertest/v3"
     9  )
    10  
    11  // DockerPool is a docker pool resource
    12  var dockerpool *dockertest.Pool
    13  
    14  // GetDockerPool initializes a docker pool
    15  func GetDockerPool() (*dockertest.Pool, error) {
    16  	var err error
    17  	if dockerpool == nil {
    18  		dockerpool, err = dockertest.NewPool("")
    19  		if err != nil {
    20  			err = fmt.Errorf("cannot attach to docker: %v", err)
    21  			return nil, err
    22  		}
    23  	}
    24  	err = dockerpool.Client.Ping()
    25  	if err != nil {
    26  		err = fmt.Errorf("could not connect to Docker: %s", err)
    27  		return nil, err
    28  	}
    29  	return dockerpool, nil
    30  }
    31  
    32  // GetContainerHostAndPort returns the mapped host and port of a docker container for a given portID
    33  func GetContainerHostAndPort(container *dockertest.Resource, portID string) (server string, port int) {
    34  	dockerURL := os.Getenv("DOCKER_HOST")
    35  	containerAddress := container.GetHostPort(portID)
    36  	s, p, _ := GetHostPort(containerAddress)
    37  	if dockerURL == "" {
    38  		server = s
    39  	} else {
    40  		// replace server with docker host
    41  		server, _, _ = GetHostPort(dockerURL)
    42  	}
    43  	port = p
    44  	return
    45  }
    46  
    47  // DestroyDockerContainer destroys a docker container
    48  func DestroyDockerContainer(container *dockertest.Resource) {
    49  	if err := dockerpool.Purge(container); err != nil {
    50  		fmt.Printf("Could not purge resource: %s\n", err)
    51  	}
    52  }
    53  
    54  // ExecDockerCmd  executes an OS cmd within container and print output
    55  func ExecDockerCmd(container *dockertest.Resource, cmd []string) (out string, code int, err error) {
    56  	var cmdout bytes.Buffer
    57  	cmdout.Reset()
    58  	code, err = container.Exec(cmd, dockertest.ExecOptions{StdOut: &cmdout})
    59  	out = cmdout.String()
    60  	return
    61  }