1package testcontainers 2 3import ( 4 "context" 5 6 "github.com/pkg/errors" 7) 8 9// GenericContainerRequest represents parameters to a generic container 10type GenericContainerRequest struct { 11 ContainerRequest // embedded request for provider 12 Started bool // whether to auto-start the container 13 ProviderType ProviderType // which provider to use, Docker if empty 14} 15 16// GenericContainer creates a generic container with parameters 17func GenericContainer(ctx context.Context, req GenericContainerRequest) (Container, error) { 18 provider, err := req.ProviderType.GetProvider() 19 if err != nil { 20 return nil, err 21 } 22 23 c, err := provider.CreateContainer(ctx, req.ContainerRequest) 24 if err != nil { 25 return nil, errors.Wrap(err, "failed to create container") 26 } 27 28 if req.Started { 29 if err := c.Start(ctx); err != nil { 30 return c, errors.Wrap(err, "failed to start container") 31 } 32 } 33 34 return c, nil 35} 36 37// GenericProvider represents an abstraction for container and network providers 38type GenericProvider interface { 39 ContainerProvider 40 NetworkProvider 41} 42