Skip to content

Commit

Permalink
Use test fixture
Browse files Browse the repository at this point in the history
  • Loading branch information
ajami1331 committed Sep 28, 2024
1 parent 3d9ce40 commit b877a57
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 39 deletions.
43 changes: 4 additions & 39 deletions IntegrationTest/CompileTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,52 +8,17 @@

namespace IntegrationTests;

public class CompileTest: IAsyncLifetime
[Collection("ContainerCollection")]
public class CompileTest
{

private IFutureDockerImage _image;
private IContainer _container;
private SandboxService _sandBoxSerivce;

public async Task DisposeAsync()
public CompileTest(ContainerFixture fixture)
{
await _container.StopAsync();
_sandBoxSerivce = fixture.SandBoxSerivce;
}

public async Task InitializeAsync()
{
_image = new ImageFromDockerfileBuilder()
.WithName("sojj1-integration-test")
.WithDockerfileDirectory(CommonDirectoryPath.GetSolutionDirectory(), string.Empty)
.WithDockerfile("Dockerfile")
.Build();
await _image.CreateAsync().ConfigureAwait(false);
_container = new ContainerBuilder()
.WithImage(_image)
.WithPortBinding(5050, true)
.WithEntrypoint("/bin/bash", "-c", "/usr/bin/sandbox -http-addr 0.0.0.0:5050 -dir ~/sandbox/ -release -file-timeout 30m")
.WithPrivileged(true)
.Build();
await _container.StartAsync();

int port = _container.GetMappedPublicPort(5050);
var logger = NSubstitute.Substitute.For<ILogger<SandboxService>>();
var inMemorySettings = new Dictionary<string, string> {
{"SandboxUrl", $"http://localhost:{port}"},
{"LanguageFilePath", "languages.json"},
{"SandboxEnvironment:0", "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/bflat"},
{"CpuLimitForRuns", "15"},
{"MemoryLimitForRuns", "1024"},
{"StackLimitForRuns", "256"},
{"ProcessLimitForRuns", "20"},
{"OutputLimitForRuns", "5"}
};
IConfiguration config = new ConfigurationBuilder()
.AddInMemoryCollection(inMemorySettings)
.Build();
_sandBoxSerivce = new SandboxService(logger, config);
}

[Fact]
public async Task CheckHealthAsync()
{
Expand Down
5 changes: 5 additions & 0 deletions IntegrationTest/ContainerCollection.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

[CollectionDefinition("ContainerCollection")]
public class ContainerCollection : ICollectionFixture<ContainerFixture>
{
}
52 changes: 52 additions & 0 deletions IntegrationTest/ContainerFixture.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using DotNet.Testcontainers.Builders;
using DotNet.Testcontainers.Containers;
using DotNet.Testcontainers.Images;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Sojj.Services;

public class ContainerFixture : IAsyncLifetime
{
public IFutureDockerImage _image;
public IContainer _container;
public SandboxService SandBoxSerivce;

public async Task DisposeAsync()
{
await _container.StopAsync();
}

public async Task InitializeAsync()
{
_image = new ImageFromDockerfileBuilder()
.WithName("sojj1-integration-test")
.WithDockerfileDirectory(CommonDirectoryPath.GetSolutionDirectory(), string.Empty)
.WithDockerfile("Dockerfile")
.Build();
await _image.CreateAsync().ConfigureAwait(false);
_container = new ContainerBuilder()
.WithImage(_image)
.WithPortBinding(5050, true)
.WithEntrypoint("/bin/bash", "-c", "/usr/bin/sandbox -http-addr 0.0.0.0:5050 -dir ~/sandbox/ -release -file-timeout 30m")
.WithPrivileged(true)
.Build();
await _container.StartAsync();

int port = _container.GetMappedPublicPort(5050);
var logger = NSubstitute.Substitute.For<ILogger<SandboxService>>();
var inMemorySettings = new Dictionary<string, string> {
{"SandboxUrl", $"http://localhost:{port}"},
{"LanguageFilePath", "languages.json"},
{"SandboxEnvironment:0", "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/bflat"},
{"CpuLimitForRuns", "15"},
{"MemoryLimitForRuns", "1024"},
{"StackLimitForRuns", "256"},
{"ProcessLimitForRuns", "20"},
{"OutputLimitForRuns", "5"}
};
IConfiguration config = new ConfigurationBuilder()
.AddInMemoryCollection(inMemorySettings)
.Build();
SandBoxSerivce = new SandboxService(logger, config);
}
}

0 comments on commit b877a57

Please sign in to comment.