public void CompletePartialTest()
        {
            peer.IsChoking = false;
            peer.BitField.SetAll(true);
            var message = picker.PickPiece(peer, peer.BitField, peers);

            Assert.IsTrue(picker.ValidatePiece(peer, message.PieceIndex, message.StartOffset, message.RequestLength, out Piece piece), "#1");
            picker.CancelRequests(peer);
            for (int i = 0; i < piece.BlockCount; i++)
            {
                message = picker.PickPiece(peer, peer.BitField, peers);
                Assert.IsTrue(picker.ValidatePiece(peer, message.PieceIndex, message.StartOffset, message.RequestLength, out Piece p), "#2." + i);
            }
            Assert.IsTrue(piece.AllBlocksRequested, "#3");
            Assert.IsTrue(piece.AllBlocksReceived, "#4");
        }
Пример #2
0
        public void PeerChoked_ReceivedOneBlock()
        {
            var messages = new List <PieceRequest> ();

            peer.IsChoking = false;
            peer.BitField.SetAll(true);

            var otherPeer = peers[1];

            otherPeer.BitField.SetAll(true);

            PieceRequest m;

            while ((m = picker.PickPiece(peer, peer.BitField, peers)) != null)
            {
                messages.Add(m);
            }

            picker.PickPiece(peer, peer.BitField, peers);
            Assert.AreEqual(torrentData.TotalBlocks, messages.Count, "#0");
            picker.ValidatePiece(peer, messages[0].PieceIndex, messages[0].StartOffset, messages[0].RequestLength, out Piece piece);
            messages.RemoveAt(0);
            picker.CancelRequests(peer);
            peer.IsChoking = true;

            otherPeer.IsChoking = true;
            Assert.IsNull(picker.PickPiece(otherPeer, otherPeer.BitField, peers));

            otherPeer.IsChoking = false;
            var messages2 = new List <PieceRequest> ();

            while ((m = picker.PickPiece(otherPeer, otherPeer.BitField, peers)) != null)
            {
                messages2.Add(m);
            }

            Assert.AreEqual(messages.Count, messages2.Count, "#1");
            for (int i = 0; i < messages.Count; i++)
            {
                Assert.IsTrue(messages2.Contains(messages[i]));
            }
        }
Пример #3
0
 public virtual bool ValidatePiece(PeerId peer, int pieceIndex, int startOffset, int length, out Piece piece)
 {
     CheckOverriden();
     return(picker.ValidatePiece(peer, pieceIndex, startOffset, length, out piece));
 }