Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removed Docker tasks, no use for them until now. #11

Merged
merged 1 commit into from
Feb 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,13 @@ Choose from existing pre-configured configurations [^1] and start containers wit
Pulls `nginx`, creates a new container with port binding `80:80` and hits the default site.

```csharp
var containerBuilder = new ContainerBuilder()
var containerBuilder = new TestcontainersBuilder()
.WithImage("nginx")
.WithPortBindings(80);

using (var container = containerBuilder.Build())
{
container.Pull();
container.Run();
container.Start();

var request = WebRequest.Create($"http://localhost:80");
}
```
Expand Down
6 changes: 2 additions & 4 deletions src/DotNet.Testcontainers.Tests/DockerImageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,9 @@ public void Test_DockerContainerStartStop_WithValidImage_NoException()
var dockerContainer = new TestcontainersBuilder().WithImage(dockerImage).Build();

// Then
dockerContainer.Pull();
dockerContainer.Run();
dockerContainer.Start();
dockerContainer.Stop();
dockerContainer.Dispose();
}

[Fact]
Expand All @@ -56,15 +55,14 @@ public void Test_DockerContainerPortBindings_WithValidImage_NoException()
.Build();

// Then
dockerContainer.Pull();
dockerContainer.Run();
dockerContainer.Start();

var request = WebRequest.Create($"http://localhost:{port}");

var response = (HttpWebResponse)request.GetResponse();

dockerContainer.Stop();
dockerContainer.Dispose();

isAvailable = response != null && response.StatusCode == HttpStatusCode.OK;

Expand Down
2 changes: 0 additions & 2 deletions src/DotNet.Testcontainers/Builders/IContainerBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ public interface IContainerBuilder
/// <returns>A configured instance of <see cref="IContainerBuilder"/>.</returns>
IContainerBuilder WithPortBindings(string hostPort, string containerPort);

IContainerBuilder WaitingFor();

/// <summary>
/// Builds the instance of <see cref="IDockerContainer"/> with the given configuration.
/// </summary>
Expand Down
5 changes: 0 additions & 5 deletions src/DotNet.Testcontainers/Builders/TestcontainersBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,6 @@ public IContainerBuilder WithPortBindings(string hostPort, string containerPort)
return this;
}

public IContainerBuilder WaitingFor()
{
return this;
}

public IDockerContainer Build()
{
return new TestcontainersContainer(this.image, this.exposedPort, this.portBindings);
Expand Down
9 changes: 4 additions & 5 deletions src/DotNet.Testcontainers/Clients/ITestcontainersClient.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
namespace DotNet.Testcontainers.Clients
{
using System.Threading.Tasks;
using Docker.DotNet.Models;

public interface ITestcontainersClient
Expand All @@ -9,12 +8,12 @@ public interface ITestcontainersClient

bool HasContainer(string containerId);

Task Pull(string image);
void Pull(string image);

string Run(string image, HostConfig hostConfig);
void Start(string containerId);

Task Start(string containerId);
void Stop(string containerId);

Task Stop(string containerId);
string Run(string image, HostConfig hostConfig);
}
}
40 changes: 22 additions & 18 deletions src/DotNet.Testcontainers/Clients/TestcontainersClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ namespace DotNet.Testcontainers.Clients
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Docker.DotNet;
using Docker.DotNet.Models;
using DotNet.Testcontainers.Diagnostics;
Expand All @@ -31,6 +30,11 @@ public static ITestcontainersClient Instance

public bool HasImage(string image)
{
if (string.IsNullOrWhiteSpace(image))
{
return false;
}

return Docker.Images.ListImagesAsync(new ImagesListParameters
{
MatchName = image,
Expand All @@ -39,6 +43,11 @@ public bool HasImage(string image)

public bool HasContainer(string containerId)
{
if (string.IsNullOrWhiteSpace(containerId))
{
return false;
}

return Docker.Containers.ListContainersAsync(new ContainersListParameters
{
All = true,
Expand All @@ -54,33 +63,28 @@ public bool HasContainer(string containerId)
}).Result.Any();
}

public Task Pull(string image)
public void Pull(string image)
{
return Docker.Images.CreateImageAsync(new ImagesCreateParameters { FromImage = image }, null, DebugProgress.Instance);
Docker.Images.CreateImageAsync(new ImagesCreateParameters { FromImage = image }, null, DebugProgress.Instance).Wait();
}

public string Run(string image, HostConfig hostConfig)
public void Start(string containerId)
{
if (!this.HasImage(image))
{
this.Pull(image);
}

return Docker.Containers.CreateContainerAsync(new CreateContainerParameters
{
Image = image,
HostConfig = hostConfig,
}).Result.ID;
Docker.Containers.StartContainerAsync(containerId, new ContainerStartParameters { }).Wait();
}

public Task Start(string containerId)
public void Stop(string containerId)
{
return Docker.Containers.StartContainerAsync(containerId, new ContainerStartParameters { });
Docker.Containers.StopContainerAsync(containerId, new ContainerStopParameters { WaitBeforeKillSeconds = 30 }).Wait();
}

public Task Stop(string containerId)
public string Run(string image, HostConfig hostConfig)
{
return Docker.Containers.StopContainerAsync(containerId, new ContainerStopParameters { WaitBeforeKillSeconds = 30 });
return Docker.Containers.CreateContainerAsync(new CreateContainerParameters
{
Image = image,
HostConfig = hostConfig,
}).Result.ID;
}
}
}
4 changes: 0 additions & 4 deletions src/DotNet.Testcontainers/Containers/IDockerContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@ namespace DotNet.Testcontainers.Containers

public interface IDockerContainer : IDisposable
{
void Pull();

void Run();

void Start();

void Stop();
Expand Down
26 changes: 14 additions & 12 deletions src/DotNet.Testcontainers/Containers/TestcontainersContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,25 +49,27 @@ private HostConfig HostConfig
}
}

public void Pull()
public void Start()
{
// TODO: Implement a proper strategy to wait until the container is up and running.
TestcontainersClient.Instance.Pull(this.Image.Image).Wait();
}
if (!TestcontainersClient.Instance.HasImage(this.Image.Image))
{
TestcontainersClient.Instance.Pull(this.Image.Image);
}

public void Run()
{
this.Id = TestcontainersClient.Instance.Run(this.Image.Image, this.HostConfig);
}
if (!TestcontainersClient.Instance.HasContainer(this.Id))
{
this.Id = TestcontainersClient.Instance.Run(this.Image.Image, this.HostConfig);
}

public void Start()
{
TestcontainersClient.Instance.Start(this.Id).Wait();
TestcontainersClient.Instance.Start(this.Id);
}

public void Stop()
{
TestcontainersClient.Instance.Stop(this.Id).Wait();
if (TestcontainersClient.Instance.HasContainer(this.Id))
{
TestcontainersClient.Instance.Stop(this.Id);
}
}

public void Dispose()
Expand Down