80dc5819d3
New dockertest has a totally different API and will require some serious refactoring. This will tide over until then by pinning the API version.
40 lines
1.3 KiB
Go
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.")
|
|
}
|