示例#1
0
        public async void SimpleMiner_Fills_AllPeers(int slotsCount)
        {
            var hashResolver  = new FakeHashResolver();
            var peerConnector = (new FakePeerConnectorProvider()).GetPeerConnector();

            var chain   = new Chain(new ChainState(new MerkleTreeNode <AgentState>(new Hash <IMerkleTree <AgentState> >[] { }), 0), "", null, slotsCount);
            var chainId = await hashResolver.StoreAsync(chain);

            var cancellationTokenSource = new CancellationTokenSource();

            var kothStateStream = new FakeStream <(Hash <Chain>, Slot?[])>(KoTH.KoTHProcessor(null, new FakeState(), hashResolver, peerConnector, null, cancellationTokenSource.Token));

            var minerTask = SimpleMiner.Miner((kothStateStream, new Hash <Chain>[] { chainId }), hashResolver, peerConnector, cancellationTokenSource.Token);
示例#2
0
        public async void KoTH_KeepsTrack_OfMinedPeers(int slotsCount, int mineCount)
        {
            var hashResolver  = new FakeHashResolver();
            var peerConnector = (new FakePeerConnectorProvider()).GetPeerConnector();

            var chain   = new Chain(new ChainState(new MerkleTreeNode <AgentState>(new Hash <IMerkleTree <AgentState> >[] { }), 0), "", null, slotsCount);
            var chainId = await hashResolver.StoreAsync(chain);

            var cancellationTokenSource = new CancellationTokenSource();

            var outputStream = await KoTH.KoTHProcessor(null, new FakeState(), hashResolver, peerConnector, null, cancellationTokenSource.Token);

            var generatorTask = Task.Run(async() =>
            {
                for (var i = 0; i < mineCount; i++)
                {
                    var slot = new Slot(peerConnector.Self, BitConverter.GetBytes(i));
                    await peerConnector.SendPubSub(KoTH.PubSubPath, (chainId, slot));
                }

                await Task.WhenAll(peerConnector.PendingHandlerTasks);
                cancellationTokenSource.Cancel();
            });

            var previousCount = 0;

            await foreach (var(stateChainId, slots) in outputStream)
            {
                var count = slots.Count(x => x != null);
                Assert.Equal(stateChainId, chainId);
                Assert.True(count == previousCount || count == previousCount + 1);
                previousCount = count;
            }

            await generatorTask;
        }