/// <summary> /// Merges the current with the new Docker resource configuration. /// </summary> /// <param name="dockerResourceConfiguration">The new Docker resource configuration.</param> /// <param name="moduleConfiguration">The module configuration.</param> /// <returns>A configured instance of <see cref="ITestcontainersBuilder{TDockerContainer}" />.</returns> protected virtual ITestcontainersBuilder <TDockerContainer> MergeNewConfiguration(ITestcontainersConfiguration dockerResourceConfiguration, Action <TDockerContainer> moduleConfiguration = null) { var autoRemove = BuildConfiguration.Combine(dockerResourceConfiguration.AutoRemove, this.DockerResourceConfiguration.AutoRemove); var privileged = BuildConfiguration.Combine(dockerResourceConfiguration.Privileged, this.DockerResourceConfiguration.Privileged); var image = BuildConfiguration.Combine(dockerResourceConfiguration.Image, this.DockerResourceConfiguration.Image); var name = BuildConfiguration.Combine(dockerResourceConfiguration.Name, this.DockerResourceConfiguration.Name); var hostname = BuildConfiguration.Combine(dockerResourceConfiguration.Hostname, this.DockerResourceConfiguration.Hostname); var workingDirectory = BuildConfiguration.Combine(dockerResourceConfiguration.WorkingDirectory, this.DockerResourceConfiguration.WorkingDirectory); var entrypoint = BuildConfiguration.Combine(dockerResourceConfiguration.Entrypoint, this.DockerResourceConfiguration.Entrypoint); var command = BuildConfiguration.Combine(dockerResourceConfiguration.Command, this.DockerResourceConfiguration.Command); var environments = BuildConfiguration.Combine(dockerResourceConfiguration.Environments, this.DockerResourceConfiguration.Environments); var labels = BuildConfiguration.Combine(dockerResourceConfiguration.Labels, this.DockerResourceConfiguration.Labels); var exposedPorts = BuildConfiguration.Combine(dockerResourceConfiguration.ExposedPorts, this.DockerResourceConfiguration.ExposedPorts); var portBindings = BuildConfiguration.Combine(dockerResourceConfiguration.PortBindings, this.DockerResourceConfiguration.PortBindings); var mounts = BuildConfiguration.Combine(dockerResourceConfiguration.Mounts, this.DockerResourceConfiguration.Mounts); var networks = BuildConfiguration.Combine(dockerResourceConfiguration.Networks, this.DockerResourceConfiguration.Networks); var networkAliases = BuildConfiguration.Combine(dockerResourceConfiguration.NetworkAliases, this.DockerResourceConfiguration.NetworkAliases); var dockerEndpointAuthConfig = BuildConfiguration.Combine(dockerResourceConfiguration.DockerEndpointAuthConfig, this.DockerResourceConfiguration.DockerEndpointAuthConfig); var dockerRegistryAuthConfig = BuildConfiguration.Combine(dockerResourceConfiguration.DockerRegistryAuthConfig, this.DockerResourceConfiguration.DockerRegistryAuthConfig); var outputConsumer = BuildConfiguration.Combine(dockerResourceConfiguration.OutputConsumer, this.DockerResourceConfiguration.OutputConsumer); var waitStrategies = BuildConfiguration.Combine <IEnumerable <IWaitUntil> >(dockerResourceConfiguration.WaitStrategies, this.DockerResourceConfiguration.WaitStrategies); var startupCallback = BuildConfiguration.Combine(dockerResourceConfiguration.StartupCallback, this.DockerResourceConfiguration.StartupCallback); var updatedDockerResourceConfiguration = new TestcontainersConfiguration(dockerEndpointAuthConfig, dockerRegistryAuthConfig, image, name, hostname, workingDirectory, entrypoint, command, environments, labels, exposedPorts, portBindings, mounts, networks, networkAliases, outputConsumer, waitStrategies, startupCallback, autoRemove, privileged); return(new TestcontainersBuilder <TDockerContainer>(updatedDockerResourceConfiguration, moduleConfiguration ?? this.mergeModuleConfiguration)); }
private TestcontainersBuilder( TestcontainersConfiguration config, Action <T> overrideConfiguration) { this.config = config; this.overrideConfiguration = overrideConfiguration; }
private TestcontainersBuilder( TestcontainersConfiguration config, Action <T> configureContainer) { this.config = config; this.configureContainer = configureContainer; }
private static ITestcontainersBuilder <T> Build( TestcontainersBuilder <T> old, TestcontainersConfiguration config, Action <T> configureContainer = null) { configureContainer = configureContainer ?? old.configureContainer; return(new TestcontainersBuilder <T>(config.Merge(old.config), configureContainer)); }
public async Task <string> RunAsync(TestcontainersConfiguration config, CancellationToken cancellationToken = default) { var image = config.Container.Image; var pullImageTask = MetaDataClientImages.Instance.ExistsWithNameAsync(image).ContinueWith(async imageExists => { if (!await imageExists) { // await ... does not work here, the image will not be pulled. Docker.Images.CreateImageAsync(new ImagesCreateParameters { FromImage = image }, null, DebugProgress.Instance, cancellationToken).GetAwaiter().GetResult(); } }); var name = config.Container.Name; var workingDir = config.Container.WorkingDirectory; var converter = new TestcontainersConfigurationConverter(config); var entrypoint = converter.Entrypoint; var cmd = converter.Command; var env = converter.Environments; var labels = converter.Labels; var exposedPorts = converter.ExposedPorts; var portBindings = converter.PortBindings; var mounts = converter.Mounts; var hostConfig = new HostConfig { PortBindings = portBindings, Mounts = mounts, }; var createParameters = new CreateContainerParameters { Image = image, Name = name, WorkingDir = workingDir, Entrypoint = entrypoint, Env = env, Labels = labels, Cmd = cmd, ExposedPorts = exposedPorts, HostConfig = hostConfig, }; await pullImageTask; return((await Docker.Containers.CreateContainerAsync(createParameters, cancellationToken)).ID); }
protected DatabaseContainer(TestcontainersConfiguration configuration) : base(configuration) { }
internal TestcontainersContainer(TestcontainersConfiguration configuration) { this.Configuration = configuration; }
internal RabbitMqTestcontainer(TestcontainersConfiguration configuration) : base(configuration) { }
internal MySqlTestcontainer(TestcontainersConfiguration configuration) : base(configuration) { }
internal PostgreSqlTestcontainer(TestcontainersConfiguration configuration) : base(configuration) { }
public TestcontainersConfigurationConverter(TestcontainersConfiguration config) { this.Config = config; }
protected TestcontainerMessageBroker(TestcontainersConfiguration configuration) : base(configuration) { }
internal RedisTestcontainer(TestcontainersConfiguration configuration) : base(configuration) { }
protected HostedServiceContainer(TestcontainersConfiguration configuration) : base(configuration) { }
internal ElasticsearchTestContainer(TestcontainersConfiguration configuration) : base(configuration) => Hostname = "localhost";
protected TestcontainersContainer(TestcontainersConfiguration configuration) { this.Configuration = configuration; }
internal CouchDbTestcontainer(TestcontainersConfiguration configuration) : base(configuration) { }
public async Task <string> RunAsync(TestcontainersConfiguration config, CancellationToken ct = default) { var image = config.Container.Image; var imageExistsTask = DockerApiClientImage.Instance.ExistsWithNameAsync(image); var pullImageTask = Task.CompletedTask; if (!await imageExistsTask) { pullImageTask = Docker.Images.CreateImageAsync(new ImagesCreateParameters { FromImage = image }, null, DebugProgress.Instance, ct); } var name = config.Container.Name; var workingDir = config.Container.WorkingDirectory; var converter = new TestcontainersConfigurationConverter(config); var entrypoint = converter.Entrypoint; var cmd = converter.Command; var env = converter.Environments; var labels = converter.Labels; var exposedPorts = converter.ExposedPorts; var portBindings = converter.PortBindings; var mounts = converter.Mounts; var hostConfig = new HostConfig { PortBindings = portBindings, Mounts = mounts, }; var createParameters = new CreateContainerParameters { Image = image, Name = name, WorkingDir = workingDir, Entrypoint = entrypoint, Env = env, Labels = labels, Cmd = cmd, ExposedPorts = exposedPorts, HostConfig = hostConfig, }; await pullImageTask; var id = (await Docker.Containers.CreateContainerAsync(createParameters, ct)).ID; TestcontainersRegistryService.Register(id, config.CleanUp); return(id); }