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

95 lines
3.2 KiB
C#
Raw Permalink Normal View History

2023-07-31 09:51:29 +00:00
using DistTestCore.Codex;
using DistTestCore.Logs;
using DistTestCore.Marketplace;
using DistTestCore.Metrics;
2023-04-13 12:36:17 +00:00
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
{
2023-07-31 09:51:29 +00:00
private readonly DateTime testStart;
2023-04-13 12:36:17 +00:00
public TestLifecycle(BaseLog log, Configuration configuration, ITimeSet timeSet, string testsType, string testNamespace)
2023-04-12 11:53:55 +00:00
{
2023-04-14 12:53:39 +00:00
Log = log;
Configuration = configuration;
TimeSet = timeSet;
2023-04-13 12:36:17 +00:00
var podLabels = new PodLabels(testsType, GetApplicationIds());
WorkflowCreator = new WorkflowCreator(log, configuration.GetK8sConfiguration(timeSet), podLabels, testNamespace);
2023-04-12 14:06:04 +00:00
FileManager = new FileManager(Log, configuration);
CodexStarter = new CodexStarter(this);
PrometheusStarter = new PrometheusStarter(this);
2023-08-13 06:40:32 +00:00
GrafanaStarter = new GrafanaStarter(this);
GethStarter = new GethStarter(this);
testStart = DateTime.UtcNow;
2023-07-31 09:51:29 +00:00
CodexVersion = null;
2023-07-18 12:26:21 +00:00
Log.WriteLogTag();
2023-04-12 14:06:04 +00:00
}
2023-04-12 11:53:55 +00:00
2023-06-28 13:11:20 +00:00
public BaseLog Log { get; }
public Configuration Configuration { get; }
public ITimeSet TimeSet { get; }
public WorkflowCreator WorkflowCreator { get; }
2023-04-12 14:06:04 +00:00
public FileManager FileManager { get; }
public CodexStarter CodexStarter { get; }
2023-04-13 12:36:17 +00:00
public PrometheusStarter PrometheusStarter { get; }
2023-08-13 06:40:32 +00:00
public GrafanaStarter GrafanaStarter { get; }
2023-04-14 07:54:07 +00:00
public GethStarter GethStarter { get; }
2023-07-31 09:51:29 +00:00
public CodexDebugVersionResponse? CodexVersion { get; private set; }
2023-04-12 11:53:55 +00:00
2023-04-12 14:06:04 +00:00
public void DeleteAllResources()
{
CodexStarter.DeleteAllResources();
FileManager.DeleteAllTestFiles();
2023-04-12 11:53:55 +00:00
}
2023-04-13 09:30:19 +00:00
2023-08-16 14:13:29 +00:00
public IDownloadedLog DownloadLog(RunningContainer container, int? tailLines = null)
2023-04-13 09:30:19 +00:00
{
var subFile = Log.CreateSubfile();
2023-06-27 13:28:00 +00:00
var description = container.Name;
var handler = new LogDownloadHandler(container, description, subFile);
2023-04-13 09:30:19 +00:00
2023-04-14 12:53:39 +00:00
Log.Log($"Downloading logs for {description} to file '{subFile.FullFilename}'");
2023-08-16 14:13:29 +00:00
CodexStarter.DownloadLog(container, handler, tailLines);
2023-04-13 09:30:19 +00:00
2023-06-27 13:28:00 +00:00
return new DownloadedLog(subFile, description);
2023-04-13 09:30:19 +00:00
}
public string GetTestDuration()
{
var testDuration = DateTime.UtcNow - testStart;
return Time.FormatDuration(testDuration);
}
2023-07-31 09:51:29 +00:00
public void SetCodexVersion(CodexDebugVersionResponse version)
{
if (CodexVersion == null) CodexVersion = version;
}
2023-08-10 09:25:22 +00:00
public ApplicationIds GetApplicationIds()
{
return new ApplicationIds(
codexId: GetCodexId(),
gethId: new GethContainerRecipe().Image,
prometheusId: new PrometheusContainerRecipe().Image,
2023-08-13 08:07:47 +00:00
codexContractsId: new CodexContractsContainerRecipe().Image,
grafanaId: new GrafanaContainerRecipe().Image
);
}
private string GetCodexId()
2023-08-10 09:25:22 +00:00
{
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
}
}