Documentation ¶
Index ¶
- Variables
- func ForSQL(port nat.Port, driver string, url func(host string, port nat.Port) string) *waitForSql
- func Walk(root *Strategy, visit VisitFunc) error
- type ExecStrategy
- func (ws *ExecStrategy) Timeout() *time.Duration
- func (ws *ExecStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *ExecStrategy) WithExitCode(exitCode int) *ExecStrategy
- func (ws *ExecStrategy) WithExitCodeMatcher(exitCodeMatcher func(exitCode int) bool) *ExecStrategy
- func (ws *ExecStrategy) WithPollInterval(pollInterval time.Duration) *ExecStrategy
- func (ws *ExecStrategy) WithResponseMatcher(matcher func(body io.Reader) bool) *ExecStrategy
- func (ws *ExecStrategy) WithStartupTimeout(startupTimeout time.Duration) *ExecStrategy
- type ExitStrategy
- func (ws *ExitStrategy) Timeout() *time.Duration
- func (ws *ExitStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *ExitStrategy) WithExitTimeout(exitTimeout time.Duration) *ExitStrategy
- func (ws *ExitStrategy) WithPollInterval(pollInterval time.Duration) *ExitStrategy
- type FileStrategy
- func (ws *FileStrategy) Timeout() *time.Duration
- func (ws *FileStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *FileStrategy) WithMatcher(matcher func(io.Reader) error) *FileStrategy
- func (ws *FileStrategy) WithPollInterval(pollInterval time.Duration) *FileStrategy
- func (ws *FileStrategy) WithStartupTimeout(startupTimeout time.Duration) *FileStrategy
- type HTTPStrategy
- func (ws *HTTPStrategy) Timeout() *time.Duration
- func (ws *HTTPStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *HTTPStrategy) WithAllowInsecure(allowInsecure bool) *HTTPStrategy
- func (ws *HTTPStrategy) WithBasicAuth(username, password string) *HTTPStrategy
- func (ws *HTTPStrategy) WithBody(reqdata io.Reader) *HTTPStrategy
- func (ws *HTTPStrategy) WithForcedIPv4LocalHost() *HTTPStrategy
- func (ws *HTTPStrategy) WithHeaders(headers map[string]string) *HTTPStrategy
- func (ws *HTTPStrategy) WithMethod(method string) *HTTPStrategy
- func (ws *HTTPStrategy) WithPollInterval(pollInterval time.Duration) *HTTPStrategy
- func (ws *HTTPStrategy) WithPort(port nat.Port) *HTTPStrategy
- func (ws *HTTPStrategy) WithResponseHeadersMatcher(matcher func(http.Header) bool) *HTTPStrategy
- func (ws *HTTPStrategy) WithResponseMatcher(matcher func(body io.Reader) bool) *HTTPStrategy
- func (ws *HTTPStrategy) WithStartupTimeout(timeout time.Duration) *HTTPStrategy
- func (ws *HTTPStrategy) WithStatusCodeMatcher(statusCodeMatcher func(status int) bool) *HTTPStrategy
- func (ws *HTTPStrategy) WithTLS(useTLS bool, tlsconf ...*tls.Config) *HTTPStrategy
- type HealthStrategy
- func (ws *HealthStrategy) Timeout() *time.Duration
- func (ws *HealthStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *HealthStrategy) WithPollInterval(pollInterval time.Duration) *HealthStrategy
- func (ws *HealthStrategy) WithStartupTimeout(startupTimeout time.Duration) *HealthStrategy
- type HostPortStrategy
- func (hp *HostPortStrategy) SkipInternalCheck() *HostPortStrategy
- func (hp *HostPortStrategy) Timeout() *time.Duration
- func (hp *HostPortStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (hp *HostPortStrategy) WithPollInterval(pollInterval time.Duration) *HostPortStrategy
- func (hp *HostPortStrategy) WithStartupTimeout(startupTimeout time.Duration) *HostPortStrategy
- type LogStrategy
- func (ws *LogStrategy) AsRegexp() *LogStrategy
- func (ws *LogStrategy) Submatch(callback func(pattern string, matches [][][]byte) error) *LogStrategy
- func (ws *LogStrategy) Timeout() *time.Duration
- func (ws *LogStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *LogStrategy) WithOccurrence(o int) *LogStrategy
- func (ws *LogStrategy) WithPollInterval(pollInterval time.Duration) *LogStrategy
- func (ws *LogStrategy) WithStartupTimeout(timeout time.Duration) *LogStrategy
- type MultiStrategy
- func (ms *MultiStrategy) Timeout() *time.Duration
- func (ms *MultiStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ms *MultiStrategy) WithDeadline(deadline time.Duration) *MultiStrategy
- func (ms *MultiStrategy) WithStartupTimeout(timeout time.Duration) Strategydeprecated
- func (ms *MultiStrategy) WithStartupTimeoutDefault(timeout time.Duration) *MultiStrategy
- type NopStrategy
- type NopStrategyTarget
- func (st NopStrategyTarget) CopyFileFromContainer(context.Context, string) (io.ReadCloser, error)
- func (st NopStrategyTarget) Exec(_ context.Context, _ []string, _ ...exec.ProcessOption) (int, io.Reader, error)
- func (st NopStrategyTarget) Host(_ context.Context) (string, error)
- func (st NopStrategyTarget) Inspect(_ context.Context) (*types.ContainerJSON, error)
- func (st NopStrategyTarget) Logs(_ context.Context) (io.ReadCloser, error)
- func (st NopStrategyTarget) MappedPort(_ context.Context, n nat.Port) (nat.Port, error)
- func (st NopStrategyTarget) Ports(_ context.Context) (nat.PortMap, error)deprecated
- func (st NopStrategyTarget) State(_ context.Context) (*types.ContainerState, error)
- type PermanentError
- type Strategy
- type StrategyTarget
- type StrategyTimeout
- type TLSStrategy
- func (ws *TLSStrategy) TLSConfig() *tls.Config
- func (ws *TLSStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
- func (ws *TLSStrategy) WithCert(certPEMFile, keyPEMFile string) *TLSStrategy
- func (ws *TLSStrategy) WithPollInterval(pollInterval time.Duration) *TLSStrategy
- func (ws *TLSStrategy) WithRootCAs(files ...string) *TLSStrategy
- func (ws *TLSStrategy) WithServerName(serverName string) *TLSStrategy
- func (ws *TLSStrategy) WithStartupTimeout(startupTimeout time.Duration) *TLSStrategy
- type VisitFunc
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // VisitStop is used as a return value from [VisitFunc] to stop the walk. // It is not returned as an error by any function. VisitStop = errors.New("stop the walk") // VisitRemove is used as a return value from [VisitFunc] to have the current node removed. // It is not returned as an error by any function. VisitRemove = errors.New("remove this strategy") )
Functions ¶
Types ¶
type ExecStrategy ¶ added in v0.13.0
type ExecStrategy struct { // additional properties ExitCodeMatcher func(exitCode int) bool ResponseMatcher func(body io.Reader) bool PollInterval time.Duration // contains filtered or unexported fields }
Example ¶
ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "alpine:latest", Entrypoint: []string{"tail", "-f", "/dev/null"}, // needed for the container to stay alive WaitingFor: wait.ForExec([]string{"ls", "/"}).WithStartupTimeout(1 * time.Second), } ctr, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(ctr); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } state, err := ctr.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func ForExec ¶ added in v0.13.0
func ForExec(cmd []string) *ExecStrategy
ForExec is a convenience method to assign ExecStrategy
func NewExecStrategy ¶ added in v0.13.0
func NewExecStrategy(cmd []string) *ExecStrategy
NewExecStrategy constructs an Exec strategy ...
func (*ExecStrategy) Timeout ¶ added in v0.16.0
func (ws *ExecStrategy) Timeout() *time.Duration
func (*ExecStrategy) WaitUntilReady ¶ added in v0.13.0
func (ws *ExecStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
func (*ExecStrategy) WithExitCode ¶ added in v0.30.0
func (ws *ExecStrategy) WithExitCode(exitCode int) *ExecStrategy
func (*ExecStrategy) WithExitCodeMatcher ¶ added in v0.13.0
func (ws *ExecStrategy) WithExitCodeMatcher(exitCodeMatcher func(exitCode int) bool) *ExecStrategy
func (*ExecStrategy) WithPollInterval ¶ added in v0.13.0
func (ws *ExecStrategy) WithPollInterval(pollInterval time.Duration) *ExecStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*ExecStrategy) WithResponseMatcher ¶ added in v0.20.0
func (ws *ExecStrategy) WithResponseMatcher(matcher func(body io.Reader) bool) *ExecStrategy
func (*ExecStrategy) WithStartupTimeout ¶ added in v0.13.0
func (ws *ExecStrategy) WithStartupTimeout(startupTimeout time.Duration) *ExecStrategy
WithStartupTimeout can be used to change the default startup timeout
type ExitStrategy ¶ added in v0.12.0
type ExitStrategy struct { // additional properties PollInterval time.Duration // contains filtered or unexported fields }
ExitStrategy will wait until container exit
func ForExit ¶ added in v0.12.0
func ForExit() *ExitStrategy
ForExit is the default construction for the fluid interface.
For Example:
wait. ForExit(). WithPollInterval(1 * time.Second)
func NewExitStrategy ¶ added in v0.12.0
func NewExitStrategy() *ExitStrategy
NewExitStrategy constructs with polling interval of 100 milliseconds without timeout by default
func (*ExitStrategy) Timeout ¶ added in v0.16.0
func (ws *ExitStrategy) Timeout() *time.Duration
func (*ExitStrategy) WaitUntilReady ¶ added in v0.12.0
func (ws *ExitStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements Strategy.WaitUntilReady
func (*ExitStrategy) WithExitTimeout ¶ added in v0.12.0
func (ws *ExitStrategy) WithExitTimeout(exitTimeout time.Duration) *ExitStrategy
WithExitTimeout can be used to change the default exit timeout
func (*ExitStrategy) WithPollInterval ¶ added in v0.12.0
func (ws *ExitStrategy) WithPollInterval(pollInterval time.Duration) *ExitStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
type FileStrategy ¶ added in v0.34.0
type FileStrategy struct {
// contains filtered or unexported fields
}
FileStrategy waits for a file to exist in the container.
func ForFile ¶ added in v0.34.0
func ForFile(file string) *FileStrategy
ForFile is a convenience method to assign FileStrategy
func NewFileStrategy ¶ added in v0.34.0
func NewFileStrategy(file string) *FileStrategy
NewFileStrategy constructs an FileStrategy strategy.
func (*FileStrategy) Timeout ¶ added in v0.34.0
func (ws *FileStrategy) Timeout() *time.Duration
Timeout returns the timeout for the strategy
func (*FileStrategy) WaitUntilReady ¶ added in v0.34.0
func (ws *FileStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady waits until the file exists in the container and copies it to the target.
func (*FileStrategy) WithMatcher ¶ added in v0.34.0
func (ws *FileStrategy) WithMatcher(matcher func(io.Reader) error) *FileStrategy
WithMatcher can be used to consume the file content. The matcher can return an errdefs.ErrNotFound to indicate that the file is not ready. Any other error will be considered a failure. Default: nil, will only wait for the file to exist.
func (*FileStrategy) WithPollInterval ¶ added in v0.34.0
func (ws *FileStrategy) WithPollInterval(pollInterval time.Duration) *FileStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*FileStrategy) WithStartupTimeout ¶ added in v0.34.0
func (ws *FileStrategy) WithStartupTimeout(startupTimeout time.Duration) *FileStrategy
WithStartupTimeout can be used to change the default startup timeout
type HTTPStrategy ¶
type HTTPStrategy struct { // additional properties Port nat.Port Path string StatusCodeMatcher func(status int) bool ResponseMatcher func(body io.Reader) bool UseTLS bool AllowInsecure bool TLSConfig *tls.Config // TLS config for HTTPS Method string // http method Body io.Reader // http request body Headers map[string]string ResponseHeadersMatcher func(headers http.Header) bool PollInterval time.Duration UserInfo *url.Userinfo ForceIPv4LocalHost bool // contains filtered or unexported fields }
Example ¶
https://github.com/testcontainers/testcontainers-go/issues/183
// waitForHTTPWithDefaultPort { ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "nginx:latest", ExposedPorts: []string{"80/tcp"}, WaitingFor: wait.ForHTTP("/").WithStartupTimeout(10 * time.Second), } c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(c); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } // } state, err := c.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func ForHTTP ¶
func ForHTTP(path string) *HTTPStrategy
ForHTTP is a convenience method similar to Wait.java https://github.com/testcontainers/testcontainers-java/blob/1d85a3834bd937f80aad3a4cec249c027f31aeb4/core/src/main/java/org/testcontainers/containers/wait/strategy/Wait.java
func NewHTTPStrategy ¶
func NewHTTPStrategy(path string) *HTTPStrategy
NewHTTPStrategy constructs a HTTP strategy waiting on port 80 and status code 200
func (*HTTPStrategy) Timeout ¶ added in v0.16.0
func (ws *HTTPStrategy) Timeout() *time.Duration
func (*HTTPStrategy) WaitUntilReady ¶
func (ws *HTTPStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements Strategy.WaitUntilReady
func (*HTTPStrategy) WithAllowInsecure ¶ added in v0.0.5
func (ws *HTTPStrategy) WithAllowInsecure(allowInsecure bool) *HTTPStrategy
func (*HTTPStrategy) WithBasicAuth ¶ added in v0.19.0
func (ws *HTTPStrategy) WithBasicAuth(username, password string) *HTTPStrategy
Example ¶
// waitForBasicAuth { ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "gogs/gogs:0.11.91", ExposedPorts: []string{"3000/tcp"}, WaitingFor: wait.ForHTTP("/").WithBasicAuth("username", "password"), } gogs, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(gogs); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } // } state, err := gogs.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func (*HTTPStrategy) WithBody ¶ added in v0.9.0
func (ws *HTTPStrategy) WithBody(reqdata io.Reader) *HTTPStrategy
func (*HTTPStrategy) WithForcedIPv4LocalHost ¶ added in v0.28.0
func (ws *HTTPStrategy) WithForcedIPv4LocalHost() *HTTPStrategy
WithForcedIPv4LocalHost forces usage of localhost to be ipv4 127.0.0.1 to avoid ipv6 docker bugs https://github.com/moby/moby/issues/42442 https://github.com/moby/moby/issues/42375
Example ¶
ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "nginx:latest", ExposedPorts: []string{"8080/tcp", "80/tcp"}, WaitingFor: wait.ForHTTP("/").WithForcedIPv4LocalHost(), } c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(c); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } state, err := c.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func (*HTTPStrategy) WithHeaders ¶ added in v0.30.0
func (ws *HTTPStrategy) WithHeaders(headers map[string]string) *HTTPStrategy
Example ¶
capath := filepath.Join("testdata", "root.pem") cafile, err := os.ReadFile(capath) if err != nil { log.Printf("can't load ca file: %v", err) return } certpool := x509.NewCertPool() if !certpool.AppendCertsFromPEM(cafile) { log.Printf("the ca file isn't valid") return } ctx := context.Background() // waitForHTTPHeaders { tlsconfig := &tls.Config{RootCAs: certpool, ServerName: "testcontainer.go.test"} req := testcontainers.ContainerRequest{ FromDockerfile: testcontainers.FromDockerfile{ Context: "testdata/http", }, ExposedPorts: []string{"6443/tcp"}, WaitingFor: wait.ForHTTP("/headers"). WithTLS(true, tlsconfig). WithPort("6443/tcp"). WithHeaders(map[string]string{"X-request-header": "value"}). WithResponseHeadersMatcher(func(headers http.Header) bool { return headers.Get("X-response-header") == "value" }, ), } // } c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(c); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } state, err := c.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func (*HTTPStrategy) WithMethod ¶ added in v0.9.0
func (ws *HTTPStrategy) WithMethod(method string) *HTTPStrategy
func (*HTTPStrategy) WithPollInterval ¶ added in v0.9.0
func (ws *HTTPStrategy) WithPollInterval(pollInterval time.Duration) *HTTPStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*HTTPStrategy) WithPort ¶
func (ws *HTTPStrategy) WithPort(port nat.Port) *HTTPStrategy
WithPort set the port to wait for. Default is the lowest numbered port.
Example ¶
// waitForHTTPWithPort { ctx := context.Background() req := testcontainers.ContainerRequest{ Image: "nginx:latest", ExposedPorts: []string{"8080/tcp", "80/tcp"}, WaitingFor: wait.ForHTTP("/").WithPort("80/tcp"), } c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(c); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } // } state, err := c.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running)
Output: true
func (*HTTPStrategy) WithResponseHeadersMatcher ¶ added in v0.30.0
func (ws *HTTPStrategy) WithResponseHeadersMatcher(matcher func(http.Header) bool) *HTTPStrategy
func (*HTTPStrategy) WithResponseMatcher ¶ added in v0.9.0
func (ws *HTTPStrategy) WithResponseMatcher(matcher func(body io.Reader) bool) *HTTPStrategy
func (*HTTPStrategy) WithStartupTimeout ¶
func (ws *HTTPStrategy) WithStartupTimeout(timeout time.Duration) *HTTPStrategy
WithStartupTimeout can be used to change the default startup timeout
func (*HTTPStrategy) WithStatusCodeMatcher ¶
func (ws *HTTPStrategy) WithStatusCodeMatcher(statusCodeMatcher func(status int) bool) *HTTPStrategy
func (*HTTPStrategy) WithTLS ¶
func (ws *HTTPStrategy) WithTLS(useTLS bool, tlsconf ...*tls.Config) *HTTPStrategy
type HealthStrategy ¶ added in v0.12.0
type HealthStrategy struct { // additional properties PollInterval time.Duration // contains filtered or unexported fields }
HealthStrategy will wait until the container becomes healthy
func ForHealthCheck ¶ added in v0.12.0
func ForHealthCheck() *HealthStrategy
ForHealthCheck is the default construction for the fluid interface.
For Example:
wait. ForHealthCheck(). WithPollInterval(1 * time.Second)
func NewHealthStrategy ¶ added in v0.12.0
func NewHealthStrategy() *HealthStrategy
NewHealthStrategy constructs with polling interval of 100 milliseconds and startup timeout of 60 seconds by default
func (*HealthStrategy) Timeout ¶ added in v0.16.0
func (ws *HealthStrategy) Timeout() *time.Duration
func (*HealthStrategy) WaitUntilReady ¶ added in v0.12.0
func (ws *HealthStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements Strategy.WaitUntilReady
func (*HealthStrategy) WithPollInterval ¶ added in v0.12.0
func (ws *HealthStrategy) WithPollInterval(pollInterval time.Duration) *HealthStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*HealthStrategy) WithStartupTimeout ¶ added in v0.12.0
func (ws *HealthStrategy) WithStartupTimeout(startupTimeout time.Duration) *HealthStrategy
WithStartupTimeout can be used to change the default startup timeout
type HostPortStrategy ¶
type HostPortStrategy struct { // Port is a string containing port number and protocol in the format "80/tcp" // which Port nat.Port PollInterval time.Duration // contains filtered or unexported fields }
func ForExposedPort ¶ added in v0.14.0
func ForExposedPort() *HostPortStrategy
ForExposedPort returns a host port strategy that waits for the first port to be exposed and bound internally the container.
func ForListeningPort ¶
func ForListeningPort(port nat.Port) *HostPortStrategy
ForListeningPort returns a host port strategy that waits for the given port to be exposed and bound internally the container. Alias for `NewHostPortStrategy(port)`.
func NewHostPortStrategy ¶
func NewHostPortStrategy(port nat.Port) *HostPortStrategy
NewHostPortStrategy constructs a default host port strategy that waits for the given port to be exposed. The default startup timeout is 60 seconds.
func (*HostPortStrategy) SkipInternalCheck ¶ added in v0.33.0
func (hp *HostPortStrategy) SkipInternalCheck() *HostPortStrategy
SkipInternalCheck changes the host port strategy to skip the internal check, which is useful when a shell is not available in the container or when the container doesn't bind the port internally until additional conditions are met.
func (*HostPortStrategy) Timeout ¶ added in v0.16.0
func (hp *HostPortStrategy) Timeout() *time.Duration
func (*HostPortStrategy) WaitUntilReady ¶
func (hp *HostPortStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements Strategy.WaitUntilReady
func (*HostPortStrategy) WithPollInterval ¶ added in v0.15.0
func (hp *HostPortStrategy) WithPollInterval(pollInterval time.Duration) *HostPortStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*HostPortStrategy) WithStartupTimeout ¶
func (hp *HostPortStrategy) WithStartupTimeout(startupTimeout time.Duration) *HostPortStrategy
WithStartupTimeout can be used to change the default startup timeout
type LogStrategy ¶
type LogStrategy struct { // additional properties Log string IsRegexp bool Occurrence int PollInterval time.Duration // contains filtered or unexported fields }
LogStrategy will wait until a given log entry shows up in the docker logs
func ForLog ¶
func ForLog(log string) *LogStrategy
ForLog is the default construction for the fluid interface.
For Example:
wait. ForLog("some text"). WithPollInterval(1 * time.Second)
func NewLogStrategy ¶
func NewLogStrategy(log string) *LogStrategy
NewLogStrategy constructs with polling interval of 100 milliseconds and startup timeout of 60 seconds by default
func (*LogStrategy) AsRegexp ¶ added in v0.24.0
func (ws *LogStrategy) AsRegexp() *LogStrategy
AsRegexp can be used to change the default behavior of the log strategy to use regexp instead of plain text
func (*LogStrategy) Submatch ¶ added in v0.34.1
func (ws *LogStrategy) Submatch(callback func(pattern string, matches [][][]byte) error) *LogStrategy
Submatch configures a function that will be called with the result of regexp.Regexp.FindAllSubmatch, allowing the caller to process the results. If the callback returns nil, the strategy will be considered successful. Returning a PermanentError will stop the wait and return an error, otherwise it will retry until the timeout is reached. [LogStrategy.Occurrence] is ignored if this option is set.
func (*LogStrategy) Timeout ¶ added in v0.16.0
func (ws *LogStrategy) Timeout() *time.Duration
func (*LogStrategy) WaitUntilReady ¶
func (ws *LogStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements Strategy.WaitUntilReady
func (*LogStrategy) WithOccurrence ¶ added in v0.0.9
func (ws *LogStrategy) WithOccurrence(o int) *LogStrategy
func (*LogStrategy) WithPollInterval ¶
func (ws *LogStrategy) WithPollInterval(pollInterval time.Duration) *LogStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds
func (*LogStrategy) WithStartupTimeout ¶
func (ws *LogStrategy) WithStartupTimeout(timeout time.Duration) *LogStrategy
WithStartupTimeout can be used to change the default startup timeout
type MultiStrategy ¶ added in v0.0.6
type MultiStrategy struct { // additional properties Strategies []Strategy // contains filtered or unexported fields }
func ForAll ¶ added in v0.0.6
func ForAll(strategies ...Strategy) *MultiStrategy
func (*MultiStrategy) Timeout ¶ added in v0.16.0
func (ms *MultiStrategy) Timeout() *time.Duration
func (*MultiStrategy) WaitUntilReady ¶ added in v0.0.6
func (ms *MultiStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
func (*MultiStrategy) WithDeadline ¶ added in v0.16.0
func (ms *MultiStrategy) WithDeadline(deadline time.Duration) *MultiStrategy
WithDeadline sets a time.Duration which limits all wait strategies
func (*MultiStrategy) WithStartupTimeout
deprecated
added in
v0.0.6
func (ms *MultiStrategy) WithStartupTimeout(timeout time.Duration) Strategy
WithStartupTimeout sets a time.Duration which limits all wait strategies
Deprecated: use WithDeadline
func (*MultiStrategy) WithStartupTimeoutDefault ¶ added in v0.16.0
func (ms *MultiStrategy) WithStartupTimeoutDefault(timeout time.Duration) *MultiStrategy
WithStartupTimeoutDefault sets the default timeout for all inner wait strategies
type NopStrategy ¶ added in v0.16.0
type NopStrategy struct {
// contains filtered or unexported fields
}
func ForNop ¶ added in v0.16.0
func ForNop( waitUntilReady func(context.Context, StrategyTarget) error, ) *NopStrategy
func (*NopStrategy) Timeout ¶ added in v0.16.0
func (ws *NopStrategy) Timeout() *time.Duration
func (*NopStrategy) WaitUntilReady ¶ added in v0.16.0
func (ws *NopStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
func (*NopStrategy) WithStartupTimeout ¶ added in v0.16.0
func (ws *NopStrategy) WithStartupTimeout(timeout time.Duration) *NopStrategy
type NopStrategyTarget ¶ added in v0.16.0
type NopStrategyTarget struct { ReaderCloser io.ReadCloser ContainerState types.ContainerState }
func (NopStrategyTarget) CopyFileFromContainer ¶ added in v0.34.0
func (st NopStrategyTarget) CopyFileFromContainer(context.Context, string) (io.ReadCloser, error)
func (NopStrategyTarget) Exec ¶ added in v0.16.0
func (st NopStrategyTarget) Exec(_ context.Context, _ []string, _ ...exec.ProcessOption) (int, io.Reader, error)
func (NopStrategyTarget) Host ¶ added in v0.16.0
func (st NopStrategyTarget) Host(_ context.Context) (string, error)
func (NopStrategyTarget) Inspect ¶ added in v0.31.0
func (st NopStrategyTarget) Inspect(_ context.Context) (*types.ContainerJSON, error)
func (NopStrategyTarget) Logs ¶ added in v0.16.0
func (st NopStrategyTarget) Logs(_ context.Context) (io.ReadCloser, error)
func (NopStrategyTarget) MappedPort ¶ added in v0.16.0
func (NopStrategyTarget) State ¶ added in v0.16.0
func (st NopStrategyTarget) State(_ context.Context) (*types.ContainerState, error)
type PermanentError ¶ added in v0.34.1
type PermanentError struct {
// contains filtered or unexported fields
}
PermanentError is a special error that will stop the wait and return an error.
func NewPermanentError ¶ added in v0.34.1
func NewPermanentError(err error) *PermanentError
NewPermanentError creates a new PermanentError.
func (*PermanentError) Error ¶ added in v0.34.1
func (e *PermanentError) Error() string
Error implements the error interface.
type Strategy ¶
type Strategy interface {
WaitUntilReady(context.Context, StrategyTarget) error
}
Strategy defines the basic interface for a Wait Strategy
type StrategyTarget ¶
type StrategyTarget interface { Host(context.Context) (string, error) Inspect(context.Context) (*types.ContainerJSON, error) Ports(ctx context.Context) (nat.PortMap, error) // Deprecated: use Inspect instead MappedPort(context.Context, nat.Port) (nat.Port, error) Logs(context.Context) (io.ReadCloser, error) Exec(context.Context, []string, ...exec.ProcessOption) (int, io.Reader, error) State(context.Context) (*types.ContainerState, error) CopyFileFromContainer(ctx context.Context, filePath string) (io.ReadCloser, error) }
type StrategyTimeout ¶ added in v0.16.0
StrategyTimeout allows MultiStrategy to configure a Strategy's Timeout
type TLSStrategy ¶ added in v0.34.1
type TLSStrategy struct {
// contains filtered or unexported fields
}
TLSStrategy is a strategy for handling TLS.
func ForTLSCert ¶ added in v0.34.1
func ForTLSCert(certPEMFile, keyPEMFile string) *TLSStrategy
ForTLSCert returns a CertStrategy that will add a Certificate to the tls.Config constructed from PEM formatted certificate key file pair in the container.
Example ¶
ctx := context.Background() // waitForTLSCert { // The file names passed to ForTLSCert are the paths where the files will // be copied to in the container as detailed by the Dockerfile. forCert := wait.ForTLSCert("/app/tls.pem", "/app/tls-key.pem"). WithServerName("testcontainer.go.test") req := testcontainers.ContainerRequest{ FromDockerfile: testcontainers.FromDockerfile{ Context: "testdata/http", }, WaitingFor: forCert, } // } c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: req, Started: true, }) defer func() { if err := testcontainers.TerminateContainer(c); err != nil { log.Printf("failed to terminate container: %s", err) } }() if err != nil { log.Printf("failed to start container: %s", err) return } state, err := c.State(ctx) if err != nil { log.Printf("failed to get container state: %s", err) return } fmt.Println(state.Running) // waitTLSConfig { config := forCert.TLSConfig() // } fmt.Println(config.ServerName) fmt.Println(len(config.Certificates))
Output: true testcontainer.go.test 1
func ForTLSRootCAs ¶ added in v0.34.1
func ForTLSRootCAs(pemFiles ...string) *TLSStrategy
ForTLSRootCAs returns a CertStrategy that sets the root CAs for the tls.Config using the given PEM formatted files from the container.
func (*TLSStrategy) TLSConfig ¶ added in v0.34.1
func (ws *TLSStrategy) TLSConfig() *tls.Config
TLSConfig returns the TLS config once the strategy is ready. If the strategy is nil, it returns nil.
func (*TLSStrategy) WaitUntilReady ¶ added in v0.34.1
func (ws *TLSStrategy) WaitUntilReady(ctx context.Context, target StrategyTarget) error
WaitUntilReady implements the Strategy interface. It waits for the CA, client cert and key files to be available in the container and uses them to setup the TLS config.
func (*TLSStrategy) WithCert ¶ added in v0.34.1
func (ws *TLSStrategy) WithCert(certPEMFile, keyPEMFile string) *TLSStrategy
WithCert sets the tls.Config Certificates using the given files from the container.
func (*TLSStrategy) WithPollInterval ¶ added in v0.34.1
func (ws *TLSStrategy) WithPollInterval(pollInterval time.Duration) *TLSStrategy
WithPollInterval can be used to override the default polling interval of 100 milliseconds.
func (*TLSStrategy) WithRootCAs ¶ added in v0.34.1
func (ws *TLSStrategy) WithRootCAs(files ...string) *TLSStrategy
WithRootCAs sets the root CAs for the tls.Config using the given files from the container.
func (*TLSStrategy) WithServerName ¶ added in v0.34.1
func (ws *TLSStrategy) WithServerName(serverName string) *TLSStrategy
WithServerName sets the server for the tls.Config.
func (*TLSStrategy) WithStartupTimeout ¶ added in v0.34.1
func (ws *TLSStrategy) WithStartupTimeout(startupTimeout time.Duration) *TLSStrategy
WithStartupTimeout can be used to change the default startup timeout.