mirror of
https://github.com/vacp2p/cs-codex-dist-tests.git
synced 2025-02-24 00:08:22 +00:00
90 lines
2.8 KiB
C#
90 lines
2.8 KiB
C#
using DistTestCore;
|
|
using DistTestCore.Codex;
|
|
using Logging;
|
|
|
|
namespace ContinuousTests
|
|
{
|
|
public class TestRun
|
|
{
|
|
private readonly Random random = new Random();
|
|
private readonly CodexNodeFactory codexNodeFactory = new CodexNodeFactory();
|
|
private readonly Configuration config;
|
|
private readonly BaseLog log;
|
|
private readonly TestFactory testFinder;
|
|
private readonly FileManager fileManager;
|
|
private ITimeSet timeSet;
|
|
|
|
public TestRun(Configuration config, BaseLog log, TestFactory testFinder)
|
|
{
|
|
this.config = config;
|
|
this.log = log;
|
|
this.testFinder = testFinder;
|
|
fileManager = new FileManager(log, new DistTestCore.Configuration());
|
|
timeSet = new DefaultTimeSet();
|
|
}
|
|
|
|
public void Run()
|
|
{
|
|
var remainingTests = testFinder.CreateTests().ToList();
|
|
while (remainingTests.Any())
|
|
{
|
|
var test = PickOneRandom(remainingTests);
|
|
var nodes = CreateRandomNodes(test.RequiredNumberOfNodes);
|
|
AssignEssentials(test, nodes);
|
|
fileManager.PushFileSet();
|
|
|
|
log.Log($"Start '{test.Name}'");
|
|
try
|
|
{
|
|
test.Run();
|
|
log.Log($"'{test.Name}' = Passed");
|
|
}
|
|
catch
|
|
{
|
|
log.Log($"'{test.Name}' = Failed");
|
|
}
|
|
|
|
fileManager.PopFileSet();
|
|
ClearEssentials(test);
|
|
Thread.Sleep(config.SleepSecondsPerTest * 1000);
|
|
}
|
|
}
|
|
|
|
private void AssignEssentials(ContinuousTest test, CodexNode[] nodes)
|
|
{
|
|
test.Initialize(nodes, log, fileManager);
|
|
}
|
|
|
|
private void ClearEssentials(ContinuousTest test)
|
|
{
|
|
// Looks a little strange, but prevents finished test from interacting further.
|
|
test.Initialize(null!, null!, null!);
|
|
}
|
|
|
|
private string[] SelectRandomUrls(int number)
|
|
{
|
|
var urls = config.CodexUrls.ToList();
|
|
var result = new string[number];
|
|
for (var i = 0; i < number; i++)
|
|
{
|
|
result[i] = PickOneRandom(urls);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private CodexNode[] CreateRandomNodes(int number)
|
|
{
|
|
var urls = SelectRandomUrls(number);
|
|
return codexNodeFactory.Create(urls, log, timeSet);
|
|
}
|
|
|
|
private T PickOneRandom<T>(List<T> remainingItems)
|
|
{
|
|
var i = random.Next(0, remainingItems.Count);
|
|
var result = remainingItems[i];
|
|
remainingItems.RemoveAt(i);
|
|
return result;
|
|
}
|
|
}
|
|
}
|