Better peer discovery result logging. Staged discovery test.
This commit is contained in:
parent
f7e7849460
commit
90a5aafa1c
|
@ -24,7 +24,7 @@ namespace DistTestCore.Codex
|
||||||
|
|
||||||
public CodexDebugPeerResponse GetDebugPeer(string peerId)
|
public CodexDebugPeerResponse GetDebugPeer(string peerId)
|
||||||
{
|
{
|
||||||
return Http().HttpGetJson<CodexDebugPeerResponse>($"debug/peer/{peerId}");
|
return Http(TimeSpan.FromSeconds(2)).HttpGetJson<CodexDebugPeerResponse>($"debug/peer/{peerId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public string UploadFile(FileStream fileStream)
|
public string UploadFile(FileStream fileStream)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using Logging;
|
using Logging;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NUnit.Framework;
|
|
||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using Utils;
|
using Utils;
|
||||||
|
@ -120,7 +119,6 @@ namespace DistTestCore
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
var msg = $"Failed to deserialize JSON: '{json}' with exception: {exception}";
|
var msg = $"Failed to deserialize JSON: '{json}' with exception: {exception}";
|
||||||
Assert.Fail(msg);
|
|
||||||
throw new InvalidOperationException(msg, exception);
|
throw new InvalidOperationException(msg, exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,14 +6,6 @@ namespace Tests.PeerDiscoveryTests
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class PeerDiscoveryTests : AutoBootstrapDistTest
|
public class PeerDiscoveryTests : AutoBootstrapDistTest
|
||||||
{
|
{
|
||||||
[Test]
|
|
||||||
public void TwoNodes()
|
|
||||||
{
|
|
||||||
SetupCodexNode();
|
|
||||||
|
|
||||||
AssertAllNodesConnected();
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestCase(2)]
|
[TestCase(2)]
|
||||||
[TestCase(3)]
|
[TestCase(3)]
|
||||||
[TestCase(10)]
|
[TestCase(10)]
|
||||||
|
@ -37,6 +29,19 @@ namespace Tests.PeerDiscoveryTests
|
||||||
AssertAllNodesConnected();
|
AssertAllNodesConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestCase(3, 3)]
|
||||||
|
[TestCase(3, 5)]
|
||||||
|
[TestCase(3, 10)]
|
||||||
|
public void StagedVariableNodes(int numberOfNodes, int numberOfStages)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < numberOfStages; i++)
|
||||||
|
{
|
||||||
|
SetupCodexNodes(numberOfNodes);
|
||||||
|
|
||||||
|
AssertAllNodesConnected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void AssertAllNodesConnected()
|
private void AssertAllNodesConnected()
|
||||||
{
|
{
|
||||||
PeerTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes(), GetTestLog());
|
PeerTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes(), GetTestLog());
|
||||||
|
|
|
@ -31,35 +31,57 @@ namespace Tests.PeerDiscoveryTests
|
||||||
|
|
||||||
private static void AssertKnowEachother(List<string> failureMessags, Entry a, Entry b, BaseLog? log)
|
private static void AssertKnowEachother(List<string> failureMessags, Entry a, Entry b, BaseLog? log)
|
||||||
{
|
{
|
||||||
AssertKnows(failureMessags, a, b, log);
|
var aKnowsB = Knows(a, b);
|
||||||
AssertKnows(failureMessags, b, a, log);
|
var bKnowsA = Knows(b, a);
|
||||||
|
|
||||||
|
var message = GetMessage(a, b, aKnowsB, bKnowsA);
|
||||||
|
|
||||||
|
if (log != null) log.Log(message);
|
||||||
|
if (!aKnowsB || !bKnowsA) failureMessags.Add(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AssertKnows(List<string> failureMessags, Entry a, Entry b, BaseLog? log)
|
private static string GetMessage(Entry a, Entry b, bool aKnowsB, bool bKnowsA)
|
||||||
|
{
|
||||||
|
var aName = a.Response.id;
|
||||||
|
var bName = b.Response.id;
|
||||||
|
|
||||||
|
if (aKnowsB && bKnowsA)
|
||||||
|
{
|
||||||
|
return $"{aName} and {bName} know each other.";
|
||||||
|
}
|
||||||
|
if (aKnowsB)
|
||||||
|
{
|
||||||
|
return $"{aName} knows {bName}, but {bName} does not know {aName}";
|
||||||
|
}
|
||||||
|
if (bKnowsA)
|
||||||
|
{
|
||||||
|
return $"{bName} knows {aName}, but {aName} does not know {bName}";
|
||||||
|
}
|
||||||
|
return $"{aName} and {bName} don't know each other.";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool Knows(Entry a, Entry b)
|
||||||
{
|
{
|
||||||
var peerId = b.Response.id;
|
var peerId = b.Response.id;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var response = GetDebugPeer(a.Node, peerId);
|
var response = GetDebugPeer(a.Node, peerId);
|
||||||
if (string.IsNullOrEmpty(response.peerId) || !response.addresses.Any())
|
if (!string.IsNullOrEmpty(response.peerId) && response.addresses.Any())
|
||||||
{
|
{
|
||||||
failureMessags.Add($"{a.Response.id} did not know peer {peerId}");
|
return true;
|
||||||
}
|
|
||||||
else if (log != null)
|
|
||||||
{
|
|
||||||
log.Log($"{a.Response.id} knows {peerId}.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
failureMessags.Add($"{a.Response.id} was unable to get 'debug/peer/{peerId}'.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CodexDebugPeerResponse GetDebugPeer(IOnlineCodexNode node, string peerId)
|
private static CodexDebugPeerResponse GetDebugPeer(IOnlineCodexNode node, string peerId)
|
||||||
{
|
{
|
||||||
return Time.Retry(() => node.GetDebugPeer(peerId));
|
return Time.Retry(() => node.GetDebugPeer(peerId), TimeSpan.FromMinutes(2), TimeSpan.FromSeconds(0.1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Entry
|
public class Entry
|
||||||
|
|
Loading…
Reference in New Issue