예제 #1
0
        public void CancelAllPendingWhenPieceReceived()
        {
            id.BitField[0] = other.BitField[0] = true;
            picker.Initialise(bitfield, torrentData, new List <Piece> ());

            var otherRequest = picker.PickPiece(other, other.BitField, new List <PeerId> ());

            PieceRequest message;
            Piece        piece;

            while ((message = picker.PickPiece(id, id.BitField, new List <PeerId> ())) != null)
            {
                Assert.IsTrue(picker.ValidatePiece(id, message.PieceIndex, message.StartOffset, message.RequestLength, out piece));
                if (piece.AllBlocksReceived)
                {
                    break;
                }
            }

            Assert.AreEqual(0, id.AmRequestingPiecesCount, "#requesting");
            Assert.IsFalse(picker.ValidatePiece(other, otherRequest.PieceIndex, otherRequest.StartOffset, otherRequest.RequestLength, out piece), "#1");
            Assert.IsNull(piece, "#2");

            message = picker.PickPiece(other, other.BitField, new List <PeerId> ());
            Assert.AreEqual(0, message.PieceIndex, "#3");
        }
예제 #2
0
        public void CancelTest()
        {
            foreach (Piece p in pieces)
            {
                for (int i = 0; i < p.BlockCount; i++)
                {
                    if (i % 2 == 0)
                    {
                        p.Blocks[i].CreateRequest(id);
                    }
                    else
                    {
                        p.Blocks[i].CreateRequest(other);
                    }
                }
            }

            picker.Initialise(bitfield, torrentData, pieces);
            picker.CancelRequests(id);
            picker.CancelRequests(other);

            id.BitField[4] = true;
            Assert.IsNotNull(picker.PickPiece(id, id.BitField, new List <PeerId>()));
        }