Saturday, June 15, 2024

C# run testcontainers and run some commands on them

 

using DotNet.Testcontainers.Builders;
using Xunit.Abstractions;
using IContainer = DotNet.Testcontainers.Containers.IContainer;

namespace TestingWithContainers;

public class CustomContainerTest(ITestOutputHelper testOutputHelper) : IAsyncLifetime
{
private IContainer[] _container;

public async Task InitializeAsync()
{
_container =
[
ContainerBuildForTest("mcr.microsoft.com/mssql/rhel/server:2019-latest"), // redhat
ContainerBuildForTest("mcr.microsoft.com/mssql/rhel/server:latest"),
ContainerBuildForTest("mcr.microsoft.com/mssql/server:2019-latest"), // ubuntu
ContainerBuildForTest("mcr.microsoft.com/mssql/server:latest"),
];

foreach (var container in _container)
{
try
{
testOutputHelper.WriteLine($"Starting container with image: {container.Image.FullName}");
await container.StartAsync();
testOutputHelper.WriteLine($"Started container with ID: {container.Id}");
}
catch (Exception ex)
{
testOutputHelper.WriteLine($"Failed to start container with image {container.Image}: {ex.Message}");
testOutputHelper.WriteLine($"Stack Trace: {ex.StackTrace}");
}
}
}

private static IContainer ContainerBuildForTest(string imageName)
{
return new ContainerBuilder()
.WithImage(imageName)
// .WithWaitStrategy(Wait.ForUnixContainer().UntilCommandIsCompleted("uname"))
.Build();
}

public async Task DisposeAsync()
{
foreach (var container in _container)
{
await container.DisposeAsync();
}
}

[Fact]
public void Run_Command()
{
Parallel.For(0, _container.Length, index =>
{
var cmd = "cat /etc/issue";
var execAsync = _container[index].ExecAsync(cmd.Split(" "), default).Result.Stdout;
testOutputHelper.WriteLine(execAsync);
// Assert.Contains("Linux", execAsync);
});
}
}

No comments:

C# scan cs file and find variables values and names

using Microsoft . CodeAnalysis ; using Microsoft . CodeAnalysis . CSharp ; using Microsoft . CodeAnalysis . CSharp . Syntax ; using Xunit . ...