cs-codex-dist-tests/DistTestCore/TestLifecycle.cs

108 lines
3.4 KiB
C#
Raw Normal View History

2023-09-12 11:32:06 +00:00
using Core;
2023-09-13 08:03:11 +00:00
using FileUtils;
using KubernetesWorkflow;
2023-04-13 09:30:19 +00:00
using Logging;
using Utils;
2023-04-12 11:53:55 +00:00
namespace DistTestCore
{
public class TestLifecycle : IK8sHooks
2023-04-12 11:53:55 +00:00
{
2023-07-31 09:51:29 +00:00
private readonly DateTime testStart;
2023-09-13 08:03:11 +00:00
private readonly EntryPoint entryPoint;
private readonly List<RunningContainers> runningContainers = new List<RunningContainers>();
2023-04-13 12:36:17 +00:00
2023-09-12 08:31:55 +00:00
public TestLifecycle(TestLog log, Configuration configuration, ITimeSet timeSet, string testNamespace)
2023-04-12 11:53:55 +00:00
{
2023-04-14 12:53:39 +00:00
Log = log;
Configuration = configuration;
TimeSet = timeSet;
testStart = DateTime.UtcNow;
2023-07-18 12:26:21 +00:00
entryPoint = new EntryPoint(log, configuration.GetK8sConfiguration(timeSet, this, testNamespace), configuration.GetFileManagerFolder(), timeSet);
2023-09-13 08:03:11 +00:00
CoreInterface = entryPoint.CreateInterface();
2023-09-11 14:57:57 +00:00
2023-09-12 08:31:55 +00:00
log.WriteLogTag();
2023-04-12 14:06:04 +00:00
}
2023-04-12 11:53:55 +00:00
2023-09-12 08:31:55 +00:00
public TestLog Log { get; }
public Configuration Configuration { get; }
public ITimeSet TimeSet { get; }
public CoreInterface CoreInterface { get; }
2023-09-12 08:31:55 +00:00
public void DeleteAllResources()
{
2023-09-13 08:03:11 +00:00
entryPoint.Tools.CreateWorkflow().DeleteNamespace();
entryPoint.Tools.GetFileManager().DeleteAllFiles();
entryPoint.Decommission();
}
public TrackedFile GenerateTestFile(ByteSize size, string label = "")
{
return entryPoint.Tools.GetFileManager().GenerateFile(size, label);
}
2023-09-13 12:24:43 +00:00
public IFileManager GetFileManager()
2023-09-13 08:03:11 +00:00
{
2023-09-13 12:24:43 +00:00
return entryPoint.Tools.GetFileManager();
}
2023-07-31 09:51:29 +00:00
2023-09-12 08:31:55 +00:00
public string GetTestDuration()
{
2023-09-12 08:31:55 +00:00
var testDuration = DateTime.UtcNow - testStart;
return Time.FormatDuration(testDuration);
}
public void OnContainersStarted(RunningContainers rc)
{
runningContainers.Add(rc);
}
public void OnContainersStopped(RunningContainers rc)
{
runningContainers.Remove(rc);
}
public void DownloadAllLogs()
{
var workflow = entryPoint.Tools.CreateWorkflow();
foreach (var rc in runningContainers)
{
foreach (var c in rc.Containers)
{
DownloadContainerLog(workflow, c);
}
}
}
private void DownloadContainerLog(IStartupWorkflow workflow, RunningContainer c)
{
var file = Log.CreateSubfile();
Log.Log($"Downloading container log for '{c.Name}' to file '{file.FullFilename}'...");
var handler = new LogDownloadHandler(c.Name, file);
workflow.DownloadContainerLog(c, handler);
}
2023-09-12 08:31:55 +00:00
//public ApplicationIds GetApplicationIds()
//{
// //return new ApplicationIds(
// // codexId: GetCodexId(),
// // gethId: new GethContainerRecipe().Image,
// // prometheusId: new PrometheusContainerRecipe().Image,
// // codexContractsId: new CodexContractsContainerRecipe().Image,
// // grafanaId: new GrafanaContainerRecipe().Image
// //);
// return null!;
//}
//private string GetCodexId()
//{
// return "";
// //var v = CodexVersion;
// //if (v == null) return new CodexContainerRecipe().Image;
// //if (v.version != "untagged build") return v.version;
// //return v.revision;
//}
2023-04-12 11:53:55 +00:00
}
}