2023-09-12 08:31:55 +00:00
using FileUtils ;
2023-04-13 12:36:17 +00:00
using KubernetesWorkflow ;
2023-04-13 09:30:19 +00:00
using Logging ;
2023-05-03 12:55:26 +00:00
using Utils ;
2023-04-12 11:53:55 +00:00
namespace DistTestCore
{
2023-09-12 08:31:55 +00:00
public class TestLifecycle : IPluginTools
2023-04-12 11:53:55 +00:00
{
2023-09-12 08:31:55 +00:00
private readonly PluginManager pluginManager ;
2023-07-31 09:51:29 +00:00
private readonly DateTime testStart ;
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 ;
2023-06-01 07:35:18 +00:00
Configuration = configuration ;
2023-05-04 06:55:20 +00:00
TimeSet = timeSet ;
2023-09-12 08:31:55 +00:00
TestNamespace = testNamespace ;
2023-05-03 12:55:26 +00:00
testStart = DateTime . UtcNow ;
2023-09-12 08:31:55 +00:00
FileManager = new FileManager ( Log , Configuration . GetFileManagerFolder ( ) ) ;
2023-07-18 12:26:21 +00:00
2023-09-12 08:31:55 +00:00
pluginManager = new PluginManager ( ) ;
pluginManager . DiscoverPlugins ( ) ;
pluginManager . InitializePlugins ( this ) ;
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 ; }
2023-06-01 07:35:18 +00:00
public Configuration Configuration { get ; }
2023-05-04 06:55:20 +00:00
public ITimeSet TimeSet { get ; }
2023-09-12 08:31:55 +00:00
public string TestNamespace { get ; }
public IFileManager FileManager { get ; }
2023-04-12 11:53:55 +00:00
2023-09-12 09:25:04 +00:00
public T GetPlugin < T > ( ) where T : IProjectPlugin
{
return pluginManager . GetPlugin < T > ( ) ;
}
2023-09-12 08:31:55 +00:00
public Http CreateHttp ( Address address , string baseUrl , Action < HttpClient > onClientCreated , string? logAlias = null )
2023-04-12 14:06:04 +00:00
{
2023-09-12 08:31:55 +00:00
return new Http ( Log , TimeSet , address , baseUrl , onClientCreated , logAlias ) ;
2023-04-12 11:53:55 +00:00
}
2023-04-13 09:30:19 +00:00
2023-09-12 08:31:55 +00:00
public Http CreateHttp ( Address address , string baseUrl , string? logAlias = null )
2023-04-13 09:30:19 +00:00
{
2023-09-12 08:31:55 +00:00
return new Http ( Log , TimeSet , address , baseUrl , logAlias ) ;
}
2023-04-13 09:30:19 +00:00
2023-09-12 08:31:55 +00:00
public IStartupWorkflow CreateWorkflow ( string? namespaceOverride = null )
{
if ( namespaceOverride ! = null ) throw new Exception ( "Namespace override is not supported in the DistTest environment. (It would mess up automatic resource cleanup.)" ) ;
var wc = new WorkflowCreator ( Log , Configuration . GetK8sConfiguration ( TimeSet ) , TestNamespace ) ;
return wc . CreateWorkflow ( ) ;
}
2023-04-13 09:30:19 +00:00
2023-09-12 08:31:55 +00:00
public IFileManager GetFileManager ( )
{
return FileManager ;
2023-04-13 09:30:19 +00:00
}
2023-05-03 12:55:26 +00:00
2023-09-12 08:31:55 +00:00
public ILog GetLog ( )
2023-05-03 12:55:26 +00:00
{
2023-09-12 08:31:55 +00:00
return Log ;
}
public void DeleteAllResources ( )
{
CreateWorkflow ( ) . DeleteNamespace ( ) ;
FileManager . DeleteAllTestFiles ( ) ;
2023-05-03 12:55:26 +00:00
}
2023-07-31 09:51:29 +00:00
2023-09-12 08:31:55 +00:00
//public IDownloadedLog DownloadLog(RunningContainer container, int? tailLines = null)
2023-09-11 09:59:33 +00:00
//{
2023-09-12 08:31:55 +00:00
// var subFile = Log.CreateSubfile();
// var description = container.Name;
// var handler = new LogDownloadHandler(container, description, subFile);
// Log.Log($"Downloading logs for {description} to file '{subFile.FullFilename}'");
// //CodexStarter.DownloadLog(container, handler, tailLines);
// return new DownloadedLog(subFile, description);
2023-09-11 09:59:33 +00:00
//}
2023-08-10 09:25:22 +00:00
2023-09-12 08:31:55 +00:00
public string GetTestDuration ( )
2023-08-10 11:58:50 +00:00
{
2023-09-12 08:31:55 +00:00
var testDuration = DateTime . UtcNow - testStart ;
return Time . FormatDuration ( testDuration ) ;
2023-08-10 11:58:50 +00:00
}
2023-09-12 08:31:55 +00:00
////public void SetCodexVersion(CodexDebugVersionResponse version)
////{
//// if (CodexVersion == null) CodexVersion = version;
////}
//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
}
}