Cleanup and support for automatic bootstrap tests
This commit is contained in:
parent
2d5554fadf
commit
5c00205f62
|
@ -0,0 +1,30 @@
|
||||||
|
namespace DistTestCore
|
||||||
|
{
|
||||||
|
public class AutoBootstrapDistTest : DistTest
|
||||||
|
{
|
||||||
|
private IOnlineCodexNode? bootstrapNode;
|
||||||
|
|
||||||
|
public override IOnlineCodexNode SetupCodexBootstrapNode(Action<ICodexSetup> setup)
|
||||||
|
{
|
||||||
|
throw new Exception("AutoBootstrapDistTest creates and attaches a single boostrap node for you. " +
|
||||||
|
"If you want to control the bootstrap node from your test, please use DistTest instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override ICodexNodeGroup SetupCodexNodes(int numberOfNodes, Action<ICodexSetup> setup)
|
||||||
|
{
|
||||||
|
var codexSetup = new CodexSetup(numberOfNodes);
|
||||||
|
setup(codexSetup);
|
||||||
|
codexSetup.WithBootstrapNode(EnsureBootstapNode());
|
||||||
|
return BringOnline(codexSetup);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IOnlineCodexNode EnsureBootstapNode()
|
||||||
|
{
|
||||||
|
if (bootstrapNode == null)
|
||||||
|
{
|
||||||
|
bootstrapNode = base.SetupCodexBootstrapNode(s => { });
|
||||||
|
}
|
||||||
|
return bootstrapNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -69,21 +69,6 @@ namespace DistTestCore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ShouldUseLongTimeouts()
|
|
||||||
{
|
|
||||||
// Don't be fooled! TestContext.CurrentTest.Test allows you easy access to the attributes of the current test.
|
|
||||||
// But this doesn't work for tests making use of [TestCase]. So instead, we use reflection here to figure out
|
|
||||||
// if the attribute is present.
|
|
||||||
var currentTest = TestContext.CurrentContext.Test;
|
|
||||||
var className = currentTest.ClassName;
|
|
||||||
var methodName = currentTest.MethodName;
|
|
||||||
|
|
||||||
var testClasses = testAssemblies.SelectMany(a => a.GetTypes()).Where(c => c.FullName == className).ToArray();
|
|
||||||
var testMethods = testClasses.SelectMany(c => c.GetMethods()).Where(m => m.Name == methodName).ToArray();
|
|
||||||
|
|
||||||
return testMethods.Any(m => m.GetCustomAttribute<UseLongTimeoutsAttribute>() != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TearDown]
|
[TearDown]
|
||||||
public void TearDownDistTest()
|
public void TearDownDistTest()
|
||||||
{
|
{
|
||||||
|
@ -108,7 +93,7 @@ namespace DistTestCore
|
||||||
return SetupCodexBootstrapNode(s => { });
|
return SetupCodexBootstrapNode(s => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
public IOnlineCodexNode SetupCodexBootstrapNode(Action<ICodexSetup> setup)
|
public virtual IOnlineCodexNode SetupCodexBootstrapNode(Action<ICodexSetup> setup)
|
||||||
{
|
{
|
||||||
return SetupCodexNode(s =>
|
return SetupCodexNode(s =>
|
||||||
{
|
{
|
||||||
|
@ -132,7 +117,7 @@ namespace DistTestCore
|
||||||
return SetupCodexNodes(numberOfNodes, s => { });
|
return SetupCodexNodes(numberOfNodes, s => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICodexNodeGroup SetupCodexNodes(int numberOfNodes, Action<ICodexSetup> setup)
|
public virtual ICodexNodeGroup SetupCodexNodes(int numberOfNodes, Action<ICodexSetup> setup)
|
||||||
{
|
{
|
||||||
var codexSetup = new CodexSetup(numberOfNodes);
|
var codexSetup = new CodexSetup(numberOfNodes);
|
||||||
|
|
||||||
|
@ -151,6 +136,21 @@ namespace DistTestCore
|
||||||
get { return lifecycle.Log; }
|
get { return lifecycle.Log; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool ShouldUseLongTimeouts()
|
||||||
|
{
|
||||||
|
// Don't be fooled! TestContext.CurrentTest.Test allows you easy access to the attributes of the current test.
|
||||||
|
// But this doesn't work for tests making use of [TestCase]. So instead, we use reflection here to figure out
|
||||||
|
// if the attribute is present.
|
||||||
|
var currentTest = TestContext.CurrentContext.Test;
|
||||||
|
var className = currentTest.ClassName;
|
||||||
|
var methodName = currentTest.MethodName;
|
||||||
|
|
||||||
|
var testClasses = testAssemblies.SelectMany(a => a.GetTypes()).Where(c => c.FullName == className).ToArray();
|
||||||
|
var testMethods = testClasses.SelectMany(c => c.GetMethods()).Where(m => m.Name == methodName).ToArray();
|
||||||
|
|
||||||
|
return testMethods.Any(m => m.GetCustomAttribute<UseLongTimeoutsAttribute>() != null);
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateNewTestLifecycle()
|
private void CreateNewTestLifecycle()
|
||||||
{
|
{
|
||||||
Stopwatch.Measure(fixtureLog, $"Setup for {GetCurrentTestName()}", () =>
|
Stopwatch.Measure(fixtureLog, $"Setup for {GetCurrentTestName()}", () =>
|
||||||
|
|
|
@ -6,8 +6,8 @@ namespace Tests.ParallelTests
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class DownloadTests : DistTest
|
public class DownloadTests : DistTest
|
||||||
{
|
{
|
||||||
[TestCase(3, 5000)]
|
[TestCase(3, 500)]
|
||||||
[TestCase(5, 1000)]
|
[TestCase(5, 100)]
|
||||||
[TestCase(10, 256)]
|
[TestCase(10, 256)]
|
||||||
[UseLongTimeouts]
|
[UseLongTimeouts]
|
||||||
public void ParallelDownload(int numberOfNodes, int filesizeMb)
|
public void ParallelDownload(int numberOfNodes, int filesizeMb)
|
||||||
|
|
Loading…
Reference in New Issue