open-vault/vendor/github.com/ory-am/dockertest/custom.go
Jeff Mitchell 22e83ae7f5 Dockerize Postgres secret backend acceptance tests
Additionally enable them on all unit test runs.
2016-06-30 13:46:39 -04:00

40 lines
1.3 KiB
Go

package dockertest
import (
"errors"
"fmt"
"log"
"time"
)
// SetupCustomContainer sets up a real an instance of the given image for testing purposes,
// using a Docker container. It returns the container ID and its IP address,
// or makes the test fail on error.
func SetupCustomContainer(imageName string, exposedPort int, timeOut time.Duration, extraDockerArgs ...string) (c ContainerID, ip string, localPort int, err error) {
localPort = RandomPort()
forward := fmt.Sprintf("%d:%d", localPort, exposedPort)
if BindDockerToLocalhost != "" {
forward = "127.0.0.1:" + forward
}
c, ip, err = SetupContainer(imageName, localPort, timeOut, func() (string, error) {
args := make([]string, 0, len(extraDockerArgs)+7)
args = append(args, "--name", GenerateContainerID(), "-d", "-P", "-p", forward)
args = append(args, extraDockerArgs...)
args = append(args, imageName)
return run(args...)
})
return
}
// ConnectToCustomContainer attempts to connect to a custom container until successful or the maximum number of tries is reached.
func ConnectToCustomContainer(url string, tries int, delay time.Duration, connector func(url string) bool) error {
for try := 0; try <= tries; try++ {
time.Sleep(delay)
if connector(url) {
return nil
}
log.Printf("Try %d failed. Retrying.", try)
}
return errors.New("Could not set up custom container.")
}