Skip to content

Commit

Permalink
Major refactoring of Node : Node and NodeServer finally decoupled, No…
Browse files Browse the repository at this point in the history
…de Disposable, Reject when duplicate versionpayload, resolve hanging on VersionPayload, 1.0.5.0
  • Loading branch information
NicolasDorier committed Sep 2, 2014
1 parent 70da675 commit db9fa99
Show file tree
Hide file tree
Showing 8 changed files with 253 additions and 151 deletions.
2 changes: 1 addition & 1 deletion NBitcoin.Tests/Benchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void BlockDownloadFromNetwork()
{
var originalNode = server.GetLocalNode();
var original = originalNode.GetChain();
Assert.True(originalNode.FullVersion.StartHeight <= original.Height);
Assert.True(originalNode.PeerVersion.StartHeight <= original.Height);

int simultaneous = 3;
var chaines = Enumerable.Range(0, simultaneous).Select(i => original.Clone()).ToArray();
Expand Down
43 changes: 29 additions & 14 deletions NBitcoin.Tests/ProtocolTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,13 @@ public void ServerDisconnectCorrectlyFromDroppingClient()
{
var to2 = tester.Server1.GetNodeByEndpoint(tester.Server2.ExternalEndpoint);
to2.VersionHandshake();
var s1Endpoint = (IPEndPoint)to2.Socket.LocalEndPoint;
Assert.True(tester.Server1.IsConnectedTo(tester.Server2.ExternalEndpoint));
Thread.Sleep(500);
Assert.True(tester.Server2.IsConnectedTo(s1Endpoint));
Assert.True(tester.Server2.IsConnectedTo(tester.Server1.ExternalEndpoint));
to2.Disconnect();
Assert.False(tester.Server1.IsConnectedTo(tester.Server2.ExternalEndpoint));
Thread.Sleep(500);
Assert.False(tester.Server2.IsConnectedTo(s1Endpoint));
Assert.False(tester.Server2.IsConnectedTo(tester.Server1.ExternalEndpoint));
}
}

Expand All @@ -225,7 +224,7 @@ public void CanReceiveHandshake()
toS2.VersionHandshake();
Assert.Equal(NodeState.HandShaked, toS2.State);
Thread.Sleep(100); //Let the time to Server2 to add the new node, else the test was failing sometimes.
Assert.Equal(NodeState.HandShaked, tester.Server2.GetNodeByEndpoint(toS2.ExternalEndpoint).State);
Assert.Equal(NodeState.HandShaked, tester.Server2.GetNodeByEndpoint(toS2.MyVersion.AddressFrom).State);
}
}

Expand Down Expand Up @@ -258,13 +257,32 @@ public void CantConnectToYourself()
}
}

[Fact]
[Trait("NodeServer", "NodeServer")]
public void CanConnectMultipleTimeToServer()
{
using(var tester = new NodeServerTester())
{
var n1 = Node.Connect(tester.Server1.Network, tester.Server1.ExternalEndpoint);
n1.VersionHandshake();
n1.PingPong();
var n2 = Node.Connect(tester.Server1.Network, tester.Server1.ExternalEndpoint);
n2.VersionHandshake();
Thread.Sleep(100);
n2.PingPong();
n1.PingPong();
Assert.Throws<InvalidOperationException>(() => n2.VersionHandshake());
Thread.Sleep(100);
n2.PingPong();
}
}

[Fact]
[Trait("NodeServer", "NodeServer")]
public void CanDownloadBlock()
{
using(var server = new NodeServer(Network.TestNet))
using(var node = Node.ConnectToLocal(Network.TestNet))
{
var node = server.GetLocalNode();
node.VersionHandshake();
node.SendMessage(new GetDataPayload(new InventoryVector()
{
Expand All @@ -281,15 +299,14 @@ public void CanDownloadBlock()
[Trait("NodeServer", "NodeServer")]
public void CanDownloadHeaders()
{
using(var server = new NodeServer(Network.TestNet))
using(var node = Node.ConnectToLocal(Network.TestNet))
{
var node = server.GetLocalNode();
node.VersionHandshake();
var begin = node.Counter.Snapshot();
var result = node.GetChain();
var end = node.Counter.Snapshot();
var diff = end - begin;
Assert.True(node.FullVersion.StartHeight <= result.Height);
Assert.True(node.PeerVersion.StartHeight <= result.Height);

var subChain = node.GetChain(result.GetBlock(10).HashBlock);
Assert.Equal(10, subChain.Height);
Expand All @@ -301,9 +318,8 @@ public void CanDownloadHeaders()
[Trait("NodeServer", "NodeServer")]
public void CanDownloadBlocks()
{
using(var server = new NodeServer(Network.TestNet))
using(var node = Node.ConnectToLocal(Network.TestNet))
{
var node = server.GetLocalNode();
var chain = node.GetChain();
chain.SetTip(chain.GetBlock(9));
var blocks = node.GetBlocks(chain.ToEnumerable(true).Select(c => c.HashBlock)).ToList();
Expand All @@ -319,12 +335,11 @@ public void CanDownloadBlocks()
[Trait("NodeServer", "NodeServer")]
public void CanDownloadLastBlocks()
{
using(var server = new NodeServer(Network.TestNet))
using(var node = Node.ConnectToLocal(Network.TestNet))
{
var node = server.GetLocalNode();
var chain = node.GetChain();

Assert.True(node.FullVersion.StartHeight <= chain.Height);
Assert.True(node.PeerVersion.StartHeight <= chain.Height);

var subChain = chain.CreateSubChain(chain.ToEnumerable(true).Skip(99).First(), true, chain.Tip, true);

Expand Down
2 changes: 1 addition & 1 deletion NBitcoin/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.4.31")]
[assembly: AssemblyVersion("1.0.5.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

0 comments on commit db9fa99

Please sign in to comment.