2023-04-19 12:57:00 +00:00
|
|
|
|
using DistTestCore;
|
2023-04-24 12:09:23 +00:00
|
|
|
|
using DistTestCore.Codex;
|
2023-04-19 12:57:00 +00:00
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using Utils;
|
|
|
|
|
|
|
|
|
|
namespace Tests.DurabilityTests
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
|
|
|
|
public class DurabilityTests : DistTest
|
|
|
|
|
{
|
|
|
|
|
[Test]
|
|
|
|
|
public void BootstrapNodeDisappearsTest()
|
|
|
|
|
{
|
2023-04-25 10:52:11 +00:00
|
|
|
|
var bootstrapNode = SetupCodexNode();
|
|
|
|
|
var group = SetupCodexNodes(2, s => s.WithBootstrapNode(bootstrapNode));
|
2023-04-19 12:57:00 +00:00
|
|
|
|
var primary = group[0];
|
|
|
|
|
var secondary = group[1];
|
|
|
|
|
|
|
|
|
|
// There is 1 minute of time for the nodes to connect to each other.
|
|
|
|
|
// (Should be easy, they're in the same pod.)
|
2023-04-24 12:09:23 +00:00
|
|
|
|
Time.Sleep(TimeSpan.FromMinutes(6));
|
2023-04-19 12:57:00 +00:00
|
|
|
|
bootstrapNode.BringOffline();
|
|
|
|
|
|
|
|
|
|
var file = GenerateTestFile(10.MB());
|
|
|
|
|
var contentId = primary.UploadFile(file);
|
|
|
|
|
var downloadedFile = secondary.DownloadContent(contentId);
|
|
|
|
|
|
|
|
|
|
file.AssertIsEqual(downloadedFile);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void DataRetentionTest()
|
|
|
|
|
{
|
2023-04-25 10:52:11 +00:00
|
|
|
|
var bootstrapNode = SetupCodexNode(s => s.WithLogLevel(CodexLogLevel.Trace));
|
2023-04-19 12:57:00 +00:00
|
|
|
|
|
2023-04-25 10:52:11 +00:00
|
|
|
|
var startGroup = SetupCodexNodes(2, s => s.WithLogLevel(CodexLogLevel.Trace).WithBootstrapNode(bootstrapNode));
|
|
|
|
|
var finishGroup = SetupCodexNodes(10, s => s.WithLogLevel(CodexLogLevel.Trace).WithBootstrapNode(bootstrapNode));
|
2023-04-19 12:57:00 +00:00
|
|
|
|
|
|
|
|
|
var file = GenerateTestFile(10.MB());
|
|
|
|
|
|
|
|
|
|
// Both nodes in the start group have the file.
|
|
|
|
|
var content = startGroup[0].UploadFile(file);
|
|
|
|
|
DownloadAndAssert(content, file, startGroup[1]);
|
|
|
|
|
|
|
|
|
|
// Three nodes of the finish group have the file.
|
|
|
|
|
DownloadAndAssert(content, file, finishGroup[0]);
|
|
|
|
|
DownloadAndAssert(content, file, finishGroup[1]);
|
|
|
|
|
DownloadAndAssert(content, file, finishGroup[2]);
|
|
|
|
|
|
|
|
|
|
// The start group goes away.
|
|
|
|
|
startGroup.BringOffline();
|
|
|
|
|
|
|
|
|
|
// All nodes in the finish group can access the file.
|
|
|
|
|
foreach (var node in finishGroup)
|
|
|
|
|
{
|
|
|
|
|
DownloadAndAssert(content, file, node);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DownloadAndAssert(ContentId content, TestFile file, IOnlineCodexNode onlineCodexNode)
|
|
|
|
|
{
|
|
|
|
|
var downloaded = onlineCodexNode.DownloadContent(content);
|
|
|
|
|
file.AssertIsEqual(downloaded);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|