Implements waiting for correct sync metric of geth nodes
This commit is contained in:
parent
929fdb1157
commit
72bb0132bf
|
@ -33,7 +33,7 @@ namespace DistTestCore
|
||||||
|
|
||||||
private void TransferInitialBalance(MarketplaceNetwork marketplaceNetwork, MarketplaceInitialConfig marketplaceConfig, GethCompanionNodeInfo[] companionNodes)
|
private void TransferInitialBalance(MarketplaceNetwork marketplaceNetwork, MarketplaceInitialConfig marketplaceConfig, GethCompanionNodeInfo[] companionNodes)
|
||||||
{
|
{
|
||||||
var interaction = marketplaceNetwork.StartInteraction(lifecycle.Log);
|
var interaction = marketplaceNetwork.StartInteraction();
|
||||||
var tokenAddress = marketplaceNetwork.Marketplace.TokenAddress;
|
var tokenAddress = marketplaceNetwork.Marketplace.TokenAddress;
|
||||||
|
|
||||||
foreach (var node in companionNodes)
|
foreach (var node in companionNodes)
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace DistTestCore.Marketplace
|
||||||
var marketplaceAddress = extractor.ExtractMarketplaceAddress();
|
var marketplaceAddress = extractor.ExtractMarketplaceAddress();
|
||||||
var abi = extractor.ExtractMarketplaceAbi();
|
var abi = extractor.ExtractMarketplaceAbi();
|
||||||
|
|
||||||
var interaction = bootstrapNode.StartInteraction(lifecycle.Log);
|
var interaction = bootstrapNode.StartInteraction();
|
||||||
var tokenAddress = interaction.GetTokenAddress(marketplaceAddress);
|
var tokenAddress = interaction.GetTokenAddress(marketplaceAddress);
|
||||||
|
|
||||||
LogEnd("Contracts deployed.");
|
LogEnd("Contracts deployed.");
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using KubernetesWorkflow;
|
using KubernetesWorkflow;
|
||||||
using Logging;
|
|
||||||
using NethereumWorkflow;
|
using NethereumWorkflow;
|
||||||
|
|
||||||
namespace DistTestCore.Marketplace
|
namespace DistTestCore.Marketplace
|
||||||
|
@ -21,14 +20,14 @@ namespace DistTestCore.Marketplace
|
||||||
public string PrivateKey { get; }
|
public string PrivateKey { get; }
|
||||||
public Port DiscoveryPort { get; }
|
public Port DiscoveryPort { get; }
|
||||||
|
|
||||||
public NethereumInteraction StartInteraction(TestLog log)
|
public NethereumInteraction StartInteraction()
|
||||||
{
|
{
|
||||||
var ip = RunningContainers.RunningPod.Cluster.IP;
|
var ip = RunningContainers.RunningPod.Cluster.IP;
|
||||||
var port = RunningContainers.Containers[0].ServicePorts[0].Number;
|
var port = RunningContainers.Containers[0].ServicePorts[0].Number;
|
||||||
var account = Account;
|
var account = Account;
|
||||||
var privateKey = PrivateKey;
|
var privateKey = PrivateKey;
|
||||||
|
|
||||||
var creator = new NethereumInteractionCreator(log, ip, port, account, privateKey);
|
var creator = new NethereumInteractionCreator(ip, port, account, privateKey);
|
||||||
return creator.CreateWorkflow();
|
return creator.CreateWorkflow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using KubernetesWorkflow;
|
using KubernetesWorkflow;
|
||||||
using Logging;
|
|
||||||
using NethereumWorkflow;
|
using NethereumWorkflow;
|
||||||
|
|
||||||
namespace DistTestCore.Marketplace
|
namespace DistTestCore.Marketplace
|
||||||
|
@ -17,14 +16,14 @@ namespace DistTestCore.Marketplace
|
||||||
public string Account { get; }
|
public string Account { get; }
|
||||||
public string PrivateKey { get; }
|
public string PrivateKey { get; }
|
||||||
|
|
||||||
public NethereumInteraction StartInteraction(TestLog log)
|
public NethereumInteraction StartInteraction()
|
||||||
{
|
{
|
||||||
var ip = RunningContainer.Pod.Cluster.IP;
|
var ip = RunningContainer.Pod.Cluster.IP;
|
||||||
var port = RunningContainer.ServicePorts[0].Number;
|
var port = RunningContainer.ServicePorts[0].Number;
|
||||||
var account = Account;
|
var account = Account;
|
||||||
var privateKey = PrivateKey;
|
var privateKey = PrivateKey;
|
||||||
|
|
||||||
var creator = new NethereumInteractionCreator(log, ip, port, account, privateKey);
|
var creator = new NethereumInteractionCreator(ip, port, account, privateKey);
|
||||||
return creator.CreateWorkflow();
|
return creator.CreateWorkflow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace DistTestCore.Marketplace
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var interaction = node.StartInteraction(lifecycle.Log);
|
var interaction = node.StartInteraction();
|
||||||
interaction.EnsureSynced(marketplace.Marketplace.Address, marketplace.Marketplace.Abi);
|
interaction.EnsureSynced(marketplace.Marketplace.Address, marketplace.Marketplace.Abi);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -103,7 +103,7 @@ namespace DistTestCore.Marketplace
|
||||||
|
|
||||||
public TestToken GetBalance()
|
public TestToken GetBalance()
|
||||||
{
|
{
|
||||||
var interaction = marketplaceNetwork.StartInteraction(log);
|
var interaction = marketplaceNetwork.StartInteraction();
|
||||||
var account = companionNode.Account;
|
var account = companionNode.Account;
|
||||||
var amount = interaction.GetBalance(marketplaceNetwork.Marketplace.TokenAddress, account);
|
var amount = interaction.GetBalance(marketplaceNetwork.Marketplace.TokenAddress, account);
|
||||||
var balance = new TestToken(amount);
|
var balance = new TestToken(amount);
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Logging;
|
using NethereumWorkflow;
|
||||||
using NethereumWorkflow;
|
|
||||||
|
|
||||||
namespace DistTestCore.Marketplace
|
namespace DistTestCore.Marketplace
|
||||||
{
|
{
|
||||||
|
@ -14,9 +13,9 @@ namespace DistTestCore.Marketplace
|
||||||
public GethBootstrapNodeInfo Bootstrap { get; }
|
public GethBootstrapNodeInfo Bootstrap { get; }
|
||||||
public MarketplaceInfo Marketplace { get; }
|
public MarketplaceInfo Marketplace { get; }
|
||||||
|
|
||||||
public NethereumInteraction StartInteraction(TestLog log)
|
public NethereumInteraction StartInteraction()
|
||||||
{
|
{
|
||||||
return Bootstrap.StartInteraction(log);
|
return Bootstrap.StartInteraction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Logging;
|
using Nethereum.ABI.FunctionEncoding.Attributes;
|
||||||
using Nethereum.ABI.FunctionEncoding.Attributes;
|
|
||||||
using Nethereum.Contracts;
|
using Nethereum.Contracts;
|
||||||
using Nethereum.Hex.HexTypes;
|
using Nethereum.Hex.HexTypes;
|
||||||
using Nethereum.Web3;
|
using Nethereum.Web3;
|
||||||
|
@ -11,13 +10,11 @@ namespace NethereumWorkflow
|
||||||
public class NethereumInteraction
|
public class NethereumInteraction
|
||||||
{
|
{
|
||||||
private readonly List<Task> openTasks = new List<Task>();
|
private readonly List<Task> openTasks = new List<Task>();
|
||||||
private readonly TestLog log;
|
|
||||||
private readonly Web3 web3;
|
private readonly Web3 web3;
|
||||||
private readonly string rootAccount;
|
private readonly string rootAccount;
|
||||||
|
|
||||||
internal NethereumInteraction(TestLog log, Web3 web3, string rootAccount)
|
internal NethereumInteraction(Web3 web3, string rootAccount)
|
||||||
{
|
{
|
||||||
this.log = log;
|
|
||||||
this.web3 = web3;
|
this.web3 = web3;
|
||||||
this.rootAccount = rootAccount;
|
this.rootAccount = rootAccount;
|
||||||
}
|
}
|
||||||
|
@ -73,31 +70,30 @@ namespace NethereumWorkflow
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EnsureSynced(string marketplaceAddress, string marketplaceAbi)
|
public void EnsureSynced(string marketplaceAddress, string marketplaceAbi)
|
||||||
|
{
|
||||||
|
WaitUntilSynced();
|
||||||
|
WaitForContract(marketplaceAddress, marketplaceAbi);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WaitUntilSynced()
|
||||||
{
|
{
|
||||||
Time.WaitUntil(() =>
|
Time.WaitUntil(() =>
|
||||||
{
|
{
|
||||||
return !Time.Wait(web3.Eth.Syncing.SendRequestAsync()).IsSyncing;
|
var sync = Time.Wait(web3.Eth.Syncing.SendRequestAsync());
|
||||||
|
var number = Time.Wait(web3.Eth.Blocks.GetBlockNumber.SendRequestAsync());
|
||||||
|
var numberOfBlocks = ToDecimal(number);
|
||||||
|
return !sync.IsSyncing && numberOfBlocks > 256;
|
||||||
|
|
||||||
}, TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(1));
|
}, TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WaitForContract(string marketplaceAddress, string marketplaceAbi)
|
||||||
|
{
|
||||||
Time.WaitUntil(() =>
|
Time.WaitUntil(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var contract = web3.Eth.GetContract(marketplaceAbi, marketplaceAddress);
|
var contract = web3.Eth.GetContract(marketplaceAbi, marketplaceAddress);
|
||||||
|
|
||||||
if (contract != null)
|
|
||||||
{
|
|
||||||
var aaa = 0;
|
|
||||||
|
|
||||||
var func = contract.GetFunction("myRequests");
|
|
||||||
var input = func.CreateCallInput();
|
|
||||||
var result = Time.Wait(func.CallAsync(input));
|
|
||||||
|
|
||||||
var eeee = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return contract != null;
|
return contract != null;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -105,8 +101,6 @@ namespace NethereumWorkflow
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}, TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(1));
|
}, TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(1));
|
||||||
|
|
||||||
Thread.Sleep(TimeSpan.FromMinutes(2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private HexBigInteger ToHexBig(decimal amount)
|
private HexBigInteger ToHexBig(decimal amount)
|
||||||
|
@ -121,6 +115,11 @@ namespace NethereumWorkflow
|
||||||
return new BigInteger(amount);
|
return new BigInteger(amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private decimal ToDecimal(HexBigInteger hexBigInteger)
|
||||||
|
{
|
||||||
|
return ToDecimal(hexBigInteger.Value);
|
||||||
|
}
|
||||||
|
|
||||||
private decimal ToDecimal(BigInteger bigInteger)
|
private decimal ToDecimal(BigInteger bigInteger)
|
||||||
{
|
{
|
||||||
return (decimal)bigInteger;
|
return (decimal)bigInteger;
|
||||||
|
|
|
@ -1,19 +1,16 @@
|
||||||
using Logging;
|
using Nethereum.Web3;
|
||||||
using Nethereum.Web3;
|
|
||||||
|
|
||||||
namespace NethereumWorkflow
|
namespace NethereumWorkflow
|
||||||
{
|
{
|
||||||
public class NethereumInteractionCreator
|
public class NethereumInteractionCreator
|
||||||
{
|
{
|
||||||
private readonly TestLog log;
|
|
||||||
private readonly string ip;
|
private readonly string ip;
|
||||||
private readonly int port;
|
private readonly int port;
|
||||||
private readonly string rootAccount;
|
private readonly string rootAccount;
|
||||||
private readonly string privateKey;
|
private readonly string privateKey;
|
||||||
|
|
||||||
public NethereumInteractionCreator(TestLog log, string ip, int port, string rootAccount, string privateKey)
|
public NethereumInteractionCreator(string ip, int port, string rootAccount, string privateKey)
|
||||||
{
|
{
|
||||||
this.log = log;
|
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
this.port = port;
|
this.port = port;
|
||||||
this.rootAccount = rootAccount;
|
this.rootAccount = rootAccount;
|
||||||
|
@ -22,7 +19,7 @@ namespace NethereumWorkflow
|
||||||
|
|
||||||
public NethereumInteraction CreateWorkflow()
|
public NethereumInteraction CreateWorkflow()
|
||||||
{
|
{
|
||||||
return new NethereumInteraction(log, CreateWeb3(), rootAccount);
|
return new NethereumInteraction(CreateWeb3(), rootAccount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Web3 CreateWeb3()
|
private Web3 CreateWeb3()
|
||||||
|
|
Loading…
Reference in New Issue