Skip to content

Commit 5667cfc

Browse files
committed
Pyramid test
1 parent ecd0e70 commit 5667cfc

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using CodexPlugin;
2+
using NUnit.Framework;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using Utils;
9+
10+
namespace CodexTests.BasicTests
11+
{
12+
[TestFixture]
13+
public class PyramidTests : CodexDistTest
14+
{
15+
[Test]
16+
[CreateTranscript(nameof(PyramidTest))]
17+
public void PyramidTest()
18+
{
19+
var size = 5.MB();
20+
var numberOfLayers = 4;
21+
22+
var bottomLayer = StartLayers(numberOfLayers);
23+
24+
var cids = UploadFiles(bottomLayer, size);
25+
26+
DownloadAllFilesFromEachNodeInLayer(bottomLayer, cids);
27+
}
28+
29+
private List<ICodexNode> StartLayers(int numberOfLayers)
30+
{
31+
var layer = new List<ICodexNode>();
32+
layer.Add(StartCodex(s => s.WithName("Top")));
33+
34+
for (var i = 0; i < numberOfLayers; i++)
35+
{
36+
var newLayer = new List<ICodexNode>();
37+
foreach (var node in layer)
38+
{
39+
newLayer.AddRange(StartCodex(2, s => s.WithBootstrapNode(node).WithName("Layer[" + i + "]")));
40+
}
41+
42+
layer.Clear();
43+
layer.AddRange(newLayer);
44+
}
45+
46+
return layer;
47+
}
48+
49+
private ContentId[] UploadFiles(List<ICodexNode> layer, ByteSize size)
50+
{
51+
var uploadTasks = new List<Task<ContentId>>();
52+
foreach (var node in layer)
53+
{
54+
uploadTasks.Add(Task.Run<ContentId>(() =>
55+
{
56+
var file = GenerateTestFile(size);
57+
return node.UploadFile(file);
58+
}));
59+
}
60+
61+
var cids = uploadTasks.Select(t =>
62+
{
63+
t.Wait();
64+
return t.Result;
65+
}).ToArray();
66+
67+
return cids;
68+
}
69+
70+
private void DownloadAllFilesFromEachNodeInLayer(List<ICodexNode> layer, ContentId[] cids)
71+
{
72+
var downloadTasks = new List<Task>();
73+
foreach (var node in layer)
74+
{
75+
downloadTasks.Add(Task.Run(() =>
76+
{
77+
var dlCids = RandomUtils.Shuffled(cids);
78+
foreach (var cid in dlCids)
79+
{
80+
node.DownloadContent(cid);
81+
}
82+
}));
83+
}
84+
85+
Task.WaitAll(downloadTasks.ToArray());
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)