2023-09-19 14:22:07 +00:00
|
|
|
|
using CodexContractsPlugin;
|
2023-09-28 10:22:35 +00:00
|
|
|
|
using CodexNetDeployer;
|
2023-09-19 14:22:07 +00:00
|
|
|
|
using CodexPlugin;
|
2023-11-12 09:36:48 +00:00
|
|
|
|
using CodexTests.Helpers;
|
2023-09-20 11:56:01 +00:00
|
|
|
|
using Core;
|
2023-09-13 12:24:43 +00:00
|
|
|
|
using DistTestCore;
|
|
|
|
|
using DistTestCore.Helpers;
|
2023-09-28 10:22:35 +00:00
|
|
|
|
using DistTestCore.Logs;
|
2024-06-06 07:54:50 +00:00
|
|
|
|
using MetricsPlugin;
|
|
|
|
|
using Newtonsoft.Json;
|
2023-09-19 14:22:07 +00:00
|
|
|
|
using NUnit.Framework.Constraints;
|
2023-09-13 12:24:43 +00:00
|
|
|
|
|
2023-10-09 14:59:52 +00:00
|
|
|
|
namespace CodexTests
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
|
|
|
|
public class CodexDistTest : DistTest
|
|
|
|
|
{
|
2023-09-20 11:56:01 +00:00
|
|
|
|
public CodexDistTest()
|
|
|
|
|
{
|
|
|
|
|
ProjectPlugin.Load<CodexPlugin.CodexPlugin>();
|
|
|
|
|
ProjectPlugin.Load<CodexContractsPlugin.CodexContractsPlugin>();
|
|
|
|
|
ProjectPlugin.Load<GethPlugin.GethPlugin>();
|
|
|
|
|
ProjectPlugin.Load<MetricsPlugin.MetricsPlugin>();
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-28 10:22:35 +00:00
|
|
|
|
protected override void Initialize(FixtureLog fixtureLog)
|
|
|
|
|
{
|
|
|
|
|
var localBuilder = new LocalCodexBuilder(fixtureLog);
|
|
|
|
|
localBuilder.Intialize();
|
|
|
|
|
localBuilder.Build();
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-09 07:32:48 +00:00
|
|
|
|
public ICodexNode StartCodex()
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
2024-05-09 07:32:48 +00:00
|
|
|
|
return StartCodex(s => { });
|
2023-09-13 12:24:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-05-09 07:32:48 +00:00
|
|
|
|
public ICodexNode StartCodex(Action<ICodexSetup> setup)
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
2024-05-09 07:32:48 +00:00
|
|
|
|
return StartCodex(1, setup)[0];
|
2023-09-13 12:24:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-05-09 07:32:48 +00:00
|
|
|
|
public ICodexNodeGroup StartCodex(int numberOfNodes)
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
2024-05-09 07:32:48 +00:00
|
|
|
|
return StartCodex(numberOfNodes, s => { });
|
2023-09-13 12:24:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-05-09 07:32:48 +00:00
|
|
|
|
public ICodexNodeGroup StartCodex(int numberOfNodes, Action<ICodexSetup> setup)
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
2023-09-20 10:02:32 +00:00
|
|
|
|
var group = Ci.StartCodexNodes(numberOfNodes, s =>
|
2023-09-13 12:24:43 +00:00
|
|
|
|
{
|
|
|
|
|
setup(s);
|
|
|
|
|
OnCodexSetup(s);
|
|
|
|
|
});
|
2024-06-12 13:28:08 +00:00
|
|
|
|
|
2023-09-13 12:24:43 +00:00
|
|
|
|
return group;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PeerConnectionTestHelpers CreatePeerConnectionTestHelpers()
|
|
|
|
|
{
|
|
|
|
|
return new PeerConnectionTestHelpers(GetTestLog());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PeerDownloadTestHelpers CreatePeerDownloadTestHelpers()
|
|
|
|
|
{
|
|
|
|
|
return new PeerDownloadTestHelpers(GetTestLog(), Get().GetFileManager());
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-30 12:30:14 +00:00
|
|
|
|
public void AssertBalance(ICodexContracts contracts, ICodexNode codexNode, Constraint constraint, string msg = "")
|
2023-09-19 14:22:07 +00:00
|
|
|
|
{
|
2023-10-30 12:30:14 +00:00
|
|
|
|
AssertHelpers.RetryAssert(constraint, () => contracts.GetTestTokenBalance(codexNode), nameof(AssertBalance) + msg);
|
2023-09-19 14:22:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-12 13:18:26 +00:00
|
|
|
|
public void CheckLogForErrors(params ICodexNode[] nodes)
|
|
|
|
|
{
|
|
|
|
|
foreach (var node in nodes) CheckLogForErrors(node);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CheckLogForErrors(ICodexNode node)
|
|
|
|
|
{
|
2024-03-20 10:11:59 +00:00
|
|
|
|
Log($"Checking {node.GetName()} log for errors.");
|
2023-12-12 13:18:26 +00:00
|
|
|
|
var log = Ci.DownloadLog(node);
|
|
|
|
|
|
|
|
|
|
log.AssertLogDoesNotContain("Block validation failed");
|
|
|
|
|
log.AssertLogDoesNotContain("ERR ");
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-06 07:54:50 +00:00
|
|
|
|
public void LogNodeStatus(ICodexNode node, IMetricsAccess? metrics = null)
|
|
|
|
|
{
|
|
|
|
|
Log("Status for " + node.GetName() + Environment.NewLine +
|
2024-06-07 15:07:35 +00:00
|
|
|
|
GetBasicNodeStatus(node));
|
2024-06-06 07:54:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetBasicNodeStatus(ICodexNode node)
|
|
|
|
|
{
|
|
|
|
|
return JsonConvert.SerializeObject(node.GetDebugInfo(), Formatting.Indented) + Environment.NewLine +
|
|
|
|
|
node.Space().ToString() + Environment.NewLine;
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-07 15:07:35 +00:00
|
|
|
|
// Disabled for now: Makes huge log files!
|
|
|
|
|
//private string GetNodeMetrics(IMetricsAccess? metrics)
|
|
|
|
|
//{
|
|
|
|
|
// if (metrics == null) return "No metrics enabled";
|
|
|
|
|
// var m = metrics.GetAllMetrics();
|
|
|
|
|
// if (m == null) return "No metrics received";
|
|
|
|
|
// return m.AsCsv();
|
|
|
|
|
//}
|
2024-06-06 07:54:50 +00:00
|
|
|
|
|
2023-09-13 12:24:43 +00:00
|
|
|
|
protected virtual void OnCodexSetup(ICodexSetup setup)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|