summaryrefslogtreecommitdiff
path: root/vendor/github.com/testcontainers/testcontainers-go/lifecycle.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-07-08 13:11:59 -0600
committermo khan <mo@mokhan.ca>2025-07-21 15:20:39 -0600
commit2ddcc34ca455973598f5693d64103deea41d8d79 (patch)
tree0b3a42aa97bca93c15c67a679c903611e5ab60c1 /vendor/github.com/testcontainers/testcontainers-go/lifecycle.go
parent16c27cd885b9c0d1241dfead3120643f0e8c556c (diff)
chore: use minit to start processes from Procfile
Diffstat (limited to 'vendor/github.com/testcontainers/testcontainers-go/lifecycle.go')
-rw-r--r--vendor/github.com/testcontainers/testcontainers-go/lifecycle.go79
1 files changed, 9 insertions, 70 deletions
diff --git a/vendor/github.com/testcontainers/testcontainers-go/lifecycle.go b/vendor/github.com/testcontainers/testcontainers-go/lifecycle.go
index 72363cc..7887ebe 100644
--- a/vendor/github.com/testcontainers/testcontainers-go/lifecycle.go
+++ b/vendor/github.com/testcontainers/testcontainers-go/lifecycle.go
@@ -9,7 +9,6 @@ import (
"strings"
"time"
- "github.com/cenkalti/backoff/v4"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/docker/go-connections/nat"
@@ -190,10 +189,7 @@ var defaultLogConsumersHook = func(cfg *LogConsumerConfig) ContainerLifecycleHoo
}
dockerContainer := c.(*DockerContainer)
- dockerContainer.consumers = dockerContainer.consumers[:0]
- for _, consumer := range cfg.Consumers {
- dockerContainer.followOutput(consumer)
- }
+ dockerContainer.resetConsumers(cfg.Consumers)
return dockerContainer.startLogProduction(ctx, cfg.Opts...)
},
@@ -213,71 +209,10 @@ var defaultLogConsumersHook = func(cfg *LogConsumerConfig) ContainerLifecycleHoo
}
}
-func checkPortsMapped(exposedAndMappedPorts nat.PortMap, exposedPorts []string) error {
- portMap, _, err := nat.ParsePortSpecs(exposedPorts)
- if err != nil {
- return fmt.Errorf("parse exposed ports: %w", err)
- }
-
- for exposedPort := range portMap {
- // having entries in exposedAndMappedPorts, where the key is the exposed port,
- // and the value is the mapped port, means that the port has been already mapped.
- if _, ok := exposedAndMappedPorts[exposedPort]; ok {
- continue
- }
-
- // check if the port is mapped with the protocol (default is TCP)
- if strings.Contains(string(exposedPort), "/") {
- return fmt.Errorf("port %s is not mapped yet", exposedPort)
- }
-
- // Port didn't have a type, default to tcp and retry.
- exposedPort += "/tcp"
- if _, ok := exposedAndMappedPorts[exposedPort]; !ok {
- return fmt.Errorf("port %s is not mapped yet", exposedPort)
- }
- }
-
- return nil
-}
-
// defaultReadinessHook is a hook that will wait for the container to be ready
var defaultReadinessHook = func() ContainerLifecycleHooks {
return ContainerLifecycleHooks{
PostStarts: []ContainerHook{
- func(ctx context.Context, c Container) error {
- // wait until all the exposed ports are mapped:
- // it will be ready when all the exposed ports are mapped,
- // checking every 50ms, up to 1s, and failing if all the
- // exposed ports are not mapped in 5s.
- dockerContainer := c.(*DockerContainer)
-
- b := backoff.NewExponentialBackOff()
-
- b.InitialInterval = 50 * time.Millisecond
- b.MaxElapsedTime = 5 * time.Second
- b.MaxInterval = time.Duration(float64(time.Second) * backoff.DefaultRandomizationFactor)
-
- err := backoff.RetryNotify(
- func() error {
- jsonRaw, err := dockerContainer.inspectRawContainer(ctx)
- if err != nil {
- return err
- }
-
- return checkPortsMapped(jsonRaw.NetworkSettings.Ports, dockerContainer.exposedPorts)
- },
- b,
- func(err error, _ time.Duration) {
- dockerContainer.logger.Printf("All requested ports were not exposed: %v", err)
- },
- )
- if err != nil {
- return fmt.Errorf("all exposed ports, %s, were not mapped in 5s: %w", dockerContainer.exposedPorts, err)
- }
-
- return nil
- },
// wait for the container to be ready
func(ctx context.Context, c Container) error {
dockerContainer := c.(*DockerContainer)
@@ -373,7 +308,11 @@ func (c *DockerContainer) printLogs(ctx context.Context, cause error) {
b, err := io.ReadAll(reader)
if err != nil {
- c.logger.Printf("failed reading container logs: %v\n", err)
+ if len(b) > 0 {
+ c.logger.Printf("failed reading container logs: %v\npartial container logs (%s):\n%s", err, cause, b)
+ } else {
+ c.logger.Printf("failed reading container logs: %v\n", err)
+ }
return
}
@@ -620,7 +559,7 @@ func combineContainerHooks(defaultHooks, userDefinedHooks []ContainerLifecycleHo
hooksType := reflect.TypeOf(hooks)
for _, defaultHook := range defaultHooks {
defaultVal := reflect.ValueOf(defaultHook)
- for i := 0; i < hooksType.NumField(); i++ {
+ for i := range hooksType.NumField() {
if strings.HasPrefix(hooksType.Field(i).Name, "Pre") {
field := hooksVal.Field(i)
field.Set(reflect.AppendSlice(field, defaultVal.Field(i)))
@@ -633,7 +572,7 @@ func combineContainerHooks(defaultHooks, userDefinedHooks []ContainerLifecycleHo
// post-hooks will be the first ones to be executed.
for _, userDefinedHook := range userDefinedHooks {
userVal := reflect.ValueOf(userDefinedHook)
- for i := 0; i < hooksType.NumField(); i++ {
+ for i := range hooksType.NumField() {
field := hooksVal.Field(i)
field.Set(reflect.AppendSlice(field, userVal.Field(i)))
}
@@ -642,7 +581,7 @@ func combineContainerHooks(defaultHooks, userDefinedHooks []ContainerLifecycleHo
// Finally, append the default post-hooks.
for _, defaultHook := range defaultHooks {
defaultVal := reflect.ValueOf(defaultHook)
- for i := 0; i < hooksType.NumField(); i++ {
+ for i := range hooksType.NumField() {
if strings.HasPrefix(hooksType.Field(i).Name, "Post") {
field := hooksVal.Field(i)
field.Set(reflect.AppendSlice(field, defaultVal.Field(i)))