public void ShouldAddTcpPortSuffix()
            {
                // Given
                var containerConfiguration = new Mock <ITestcontainersConfiguration>();

                containerConfiguration.Setup(config => config.PortBindings)
                .Returns(new Dictionary <string, string> {
                    { Port, Port }
                });

                // When
                var portBinding = new TestcontainersConfigurationConverter(containerConfiguration.Object)
                                  .PortBindings
                                  .Single()
                                  .Key;

                // Then
                Assert.Equal($"{Port}/tcp", portBinding);
            }
            public void ShouldAddTcpPortSuffix()
            {
                // Given
                var containerConfiguration = new Mock <ITestcontainersConfiguration>();

                containerConfiguration.Setup(config => config.ExposedPorts)
                .Returns(new Dictionary <string, string> {
                    { Port, null }
                });

                // When
                var exposedPort = new TestcontainersConfigurationConverter(containerConfiguration.Object)
                                  .ExposedPorts
                                  .Single()
                                  .Key;

                // Then
                Assert.Equal($"{Port}/tcp", exposedPort);
            }
            public void ShouldKeepPortSuffix(string portSuffix)
            {
                // Given
                var qualifiedPort = $"{Port}/{portSuffix}";

                var containerConfiguration = new Mock <ITestcontainersConfiguration>();

                containerConfiguration.Setup(config => config.PortBindings)
                .Returns(new Dictionary <string, string> {
                    { qualifiedPort, Port }
                });

                // When
                var portBinding = new TestcontainersConfigurationConverter(containerConfiguration.Object)
                                  .PortBindings
                                  .Single()
                                  .Key;

                // Then
                Assert.Equal($"{Port}/{portSuffix}".ToLowerInvariant(), portBinding);
            }
Beispiel #4
0
        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);
        }