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 }