Allows disabling of log download on test failure with test attirbute

This commit is contained in:
benbierens 2023-03-26 10:57:54 +02:00
parent ce963a228c
commit 5d66e900f1
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
3 changed files with 92 additions and 69 deletions

View File

@ -83,8 +83,16 @@ namespace CodexDistTestCore
var result = TestContext.CurrentContext.Result; var result = TestContext.CurrentContext.Result;
if (result.Outcome.Status == NUnit.Framework.Interfaces.TestStatus.Failed) if (result.Outcome.Status == NUnit.Framework.Interfaces.TestStatus.Failed)
{ {
if (IsDownloadingLogsEnabled())
{
log.Log("Downloading all CodexNode logs because of test failure...");
k8sManager.ForEachOnlineGroup(DownloadLogs); k8sManager.ForEachOnlineGroup(DownloadLogs);
} }
else
{
log.Log("Skipping download of all CodexNode logs due to [DontDownloadLogsOnFailure] attribute.");
}
}
} }
private void DownloadLogs(CodexNodeGroup group) private void DownloadLogs(CodexNodeGroup group)
@ -96,6 +104,12 @@ namespace CodexDistTestCore
downloader.DownloadLog(n); downloader.DownloadLog(n);
} }
} }
private bool IsDownloadingLogsEnabled()
{
var testProperties = TestContext.CurrentContext.Test.Properties;
return !testProperties.ContainsKey(PodLogDownloader.DontDownloadLogsOnFailureKey);
}
} }
public static class GlobalTestFailure public static class GlobalTestFailure

View File

@ -1,12 +1,25 @@
namespace CodexDistTestCore using NUnit.Framework;
namespace CodexDistTestCore
{ {
public interface IPodLogHandler public interface IPodLogHandler
{ {
void Log(Stream log); void Log(Stream log);
} }
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class DontDownloadLogsOnFailureAttribute : PropertyAttribute
{
public DontDownloadLogsOnFailureAttribute()
: base(Timing.UseLongTimeoutsKey)
{
}
}
public class PodLogDownloader public class PodLogDownloader
{ {
public const string DontDownloadLogsOnFailureKey = "DontDownloadLogsOnFailure";
private readonly TestLog log; private readonly TestLog log;
private readonly IK8sManager k8SManager; private readonly IK8sManager k8SManager;

View File

@ -1,4 +1,5 @@
using CodexDistTestCore; using CodexDistTestCore;
using CodexDistTestCore.Config;
using NUnit.Framework; using NUnit.Framework;
namespace Tests.BasicTests namespace Tests.BasicTests
@ -7,87 +8,82 @@ namespace Tests.BasicTests
public class SimpleTests : DistTest public class SimpleTests : DistTest
{ {
[Test] [Test]
public void GetDebugInfo()
{
var dockerImage = new CodexDockerImage();
var node = SetupCodexNodes(1).BringOnline()[0];
var debugInfo = node.GetDebugInfo();
Assert.That(debugInfo.spr, Is.Not.Empty);
Assert.That(debugInfo.codex.revision, Is.EqualTo(dockerImage.GetExpectedImageRevision()));
}
[Test, DontDownloadLogsOnFailure]
public void CanAccessLogs() public void CanAccessLogs()
{
var node = SetupCodexNodes(1).BringOnline()[0];
var log = node.DownloadLog();
log.AssertLogContains("Started codex node");
}
[Test]
public void OneClientTest()
{
var primary = SetupCodexNodes(1).BringOnline()[0];
var testFile = GenerateTestFile(1.MB());
var contentId = primary.UploadFile(testFile);
var downloadedFile = primary.DownloadContent(contentId);
testFile.AssertIsEqual(downloadedFile);
}
[Test]
public void TwoClientsOnePodTest()
{ {
var group = SetupCodexNodes(2).BringOnline(); var group = SetupCodexNodes(2).BringOnline();
var log = group[0].DownloadLog(); var primary = group[0];
var secondary = group[1];
log.AssertLogContains("topics=\"discv5\""); PerformTwoClientTest(primary, secondary);
} }
//[Test] [Test]
//public void GetDebugInfo() public void TwoClientsTwoPodsTest()
//{ {
// var dockerImage = new CodexDockerImage(); var primary = SetupCodexNodes(1).BringOnline()[0];
// var node = SetupCodexNodes(1) var secondary = SetupCodexNodes(1).BringOnline()[0];
// .BringOnline()[0];
// var debugInfo = node.GetDebugInfo(); PerformTwoClientTest(primary, secondary);
}
// Assert.That(debugInfo.spr, Is.Not.Empty); [Test]
// Assert.That(debugInfo.codex.revision, Is.EqualTo(dockerImage.GetExpectedImageRevision())); public void TwoClientsTwoLocationsTest()
//} {
var primary = SetupCodexNodes(1)
.At(Location.BensLaptop)
.BringOnline()[0];
//[Test] var secondary = SetupCodexNodes(1)
//public void OneClientTest() .At(Location.BensOldGamingMachine)
//{ .BringOnline()[0];
// var primary = SetupCodexNodes(1)
// .BringOnline()[0];
// var testFile = GenerateTestFile(1.MB()); var debugInfo = primary.GetDebugInfo();
Assert.That(debugInfo.spr, Is.Not.Empty);
// var contentId = primary.UploadFile(testFile); var debugInfo2 = secondary.GetDebugInfo();
Assert.That(debugInfo2.spr, Is.Not.Empty);
// var downloadedFile = primary.DownloadContent(contentId); PerformTwoClientTest(primary, secondary);
}
// testFile.AssertIsEqual(downloadedFile);
//}
//[Test]
//public void TwoClientsOnePodTest()
//{
// var group = SetupCodexNodes(2)
// .BringOnline();
// var primary = group[0];
// var secondary = group[1];
// PerformTwoClientTest(primary, secondary);
//}
//[Test]
//public void TwoClientsTwoPodsTest()
//{
// var primary = SetupCodexNodes(1)
// .BringOnline()[0];
// var secondary = SetupCodexNodes(1)
// .BringOnline()[0];
// PerformTwoClientTest(primary, secondary);
//}
//[Test]
//public void TwoClientsTwoLocationsTest()
//{
// var primary = SetupCodexNodes(1)
// .At(Location.BensLaptop)
// .BringOnline()[0];
// var secondary = SetupCodexNodes(1)
// .At(Location.BensOldGamingMachine)
// .BringOnline()[0];
// var debugInfo = primary.GetDebugInfo();
// Assert.That(debugInfo.spr, Is.Not.Empty);
// var debugInfo2 = secondary.GetDebugInfo();
// Assert.That(debugInfo2.spr, Is.Not.Empty);
// PerformTwoClientTest(primary, secondary);
//}
private void PerformTwoClientTest(IOnlineCodexNode primary, IOnlineCodexNode secondary) private void PerformTwoClientTest(IOnlineCodexNode primary, IOnlineCodexNode secondary)
{ {