/
SwarmTest.AppProtocolVersion.cs
93 lines (78 loc) · 2.74 KB
/
SwarmTest.AppProtocolVersion.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System.Linq;
using System.Threading.Tasks;
using Libplanet.Crypto;
using Libplanet.Net;
using Libplanet.Net.Protocols;
using Xunit;
namespace Libplanet.Tests.Net
{
public partial class SwarmTest
{
private static readonly AppProtocolVersion DefaultAppProtocolVersion =
new AppProtocolVersion(new PrivateKey(), 1);
[Fact(Timeout = Timeout)]
public async Task DetectAppProtocolVersion()
{
var blockChain = _blockchains[0];
var signer = new PrivateKey();
var v2 = new AppProtocolVersion(signer, 2);
var v3 = new AppProtocolVersion(signer, 3);
var a = CreateSwarm(blockChain, appProtocolVersion: v2);
var b = CreateSwarm(blockChain, appProtocolVersion: v3);
var c = CreateSwarm(blockChain, appProtocolVersion: v2);
var d = CreateSwarm(blockChain, appProtocolVersion: v3);
try
{
await StartAsync(c);
await StartAsync(d);
var peers = new[] { c.AsPeer, d.AsPeer };
foreach (var peer in peers)
{
await a.AddPeersAsync(new[] { peer }, null);
await b.AddPeersAsync(new[] { peer }, null);
}
Assert.Equal(new[] { c.AsPeer }, a.Peers.ToArray());
Assert.Equal(new[] { d.AsPeer }, b.Peers.ToArray());
}
finally
{
await StopAsync(c);
await StopAsync(d);
a.Dispose();
b.Dispose();
c.Dispose();
d.Dispose();
}
}
[Fact(Timeout = Timeout)]
public async Task HandleDifferentAppProtocolVersion()
{
var isCalled = false;
void GameHandler(object sender, DifferentProtocolVersionEventArgs e)
{
isCalled = true;
}
var signer = new PrivateKey();
var v2 = new AppProtocolVersion(signer, 2);
var v3 = new AppProtocolVersion(signer, 3);
var a = CreateSwarm(
_blockchains[0],
appProtocolVersion: v2,
differentVersionPeerEncountered: GameHandler);
var b = CreateSwarm(_blockchains[1], appProtocolVersion: v3);
try
{
await StartAsync(b);
await Assert.ThrowsAsync<PeerDiscoveryException>(() => BootstrapAsync(a, b.AsPeer));
Assert.True(isCalled);
}
finally
{
await StopAsync(a);
await StopAsync(b);
a.Dispose();
b.Dispose();
}
}
}
}