コード例 #1
0
        public void StartHandShakeTest()
        {
            var pl = new MockSerializableMessagePayload(PayloadType.Version, new byte[3] {
                1, 2, 3
            });
            Message msg = new Message(pl, NetworkType.MainNet);

            byte[] msgSer = Helper.HexToBytes("f9beb4d976657273696f6e00000000000300000019c6197e010203");
            var    repMan = new MockReplyManager()
            {
                verMessage = msg
            };
            MessageManager man = new MessageManager(30, repMan, new NodeStatus(), NetworkType.MainNet);

            using SocketAsyncEventArgs sarg = new SocketAsyncEventArgs();
            sarg.SetBuffer(new byte[30], 0, 30);

            byte[] expBuffer = new byte[30];
            Buffer.BlockCopy(msgSer, 0, expBuffer, 0, msgSer.Length);

            man.StartHandShake(sarg);

            Assert.Equal(expBuffer, sarg.Buffer);
            Assert.Equal(msgSer.Length, sarg.Count);
            Assert.Equal(0, sarg.Offset);
            Assert.Null(man.DataToSend); // StartHandShake sets the SAEA buffer and sets the field to null
            Assert.False(man.HasDataToSend);
            Assert.True(man.IsReceiveCompleted);
        }
コード例 #2
0
        public void ReadBytes_SmallBufferTest()
        {
            var mockMsg = new Message(new MockSerializableMessagePayload((PayloadType)10000, new byte[] { 1, 2, 3 }), NetworkType.MainNet);
            var repMan  = new MockReplyManager()
            {
                toReceive = new PayloadType[] { PayloadType.Version },
                toReply   = new Message[][] { new Message[] { mockMsg } }
            };
            MessageManager man = new MessageManager(30, repMan, new NodeStatus());

            man.ReadBytes(null, 0, 0);
            Assert.True(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);

            man.ReadBytes(new byte[100], 0, 0);
            Assert.True(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);

            // f9beb4d976657273696f6e0000000000650000005f1a69d2
            man.ReadBytes(new byte[] { 0xf9, 0xbe }, 2, 0);
            Assert.False(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);

            man.ReadBytes(new byte[] { 0xb4, 0xd9, 0x76 }, 3, 0);
            Assert.False(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);
            Helper.ComparePrivateField(man, "tempHolder", new byte[] { 0xf9, 0xbe, 0xb4, 0xd9, 0x76 });

            man.ReadBytes(new byte[18] {
                0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5f, 0x1a, 0x69
            }, 18, 0);
            Assert.False(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);
            Helper.ComparePrivateField(man, "tempHolder", new byte[] { 0xf9, 0xbe, 0xb4, 0xd9, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5f, 0x1a, 0x69 });

            // Header will be read completely but this header needs a payload which is not yet present
            man.ReadBytes(new byte[] { 0xd2 }, 1, 0);
            Assert.False(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);
            Helper.ComparePrivateField(man, "tempHolder", new byte[] { 0xf9, 0xbe, 0xb4, 0xd9, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x5f, 0x1a, 0x69, 0xd2 });

            man.ReadBytes(new byte[5] {
                0x72, 0x11, 0x01, 0x00, 0x01
            }, 5, 0);
            Assert.False(man.IsReceiveCompleted);
            Assert.False(man.HasDataToSend);
            Helper.ComparePrivateField(man, "tempHolder", Helper.HexToBytes("f9beb4d976657273696f6e0000000000650000005f1a69d27211010001"));

            man.ReadBytes(Helper.HexToBytes("00000000000000bc8f5e5400000000010000000000000000000000000000000000ffffc61b6409208d010000000000000000000000000000000000ffffcb0071c0208d128035cbc97953f80f2f5361746f7368693a302e392e332fcf05050001"), 96, 0);
            Assert.True(man.IsReceiveCompleted);
            Assert.True(man.HasDataToSend);
        }
コード例 #3
0
        public void GetPingMsgTest()
        {
            var cs = new MockClientSettings()
            {
                _netType = NetworkType.TestNet, _buffLen = 10
            };
            var expectedPing = new Message(new PingPayload(1), NetworkType.TestNet);
            var repMan       = new MockReplyManager()
            {
                pingMsg = expectedPing
            };
            MessageManager man = new MessageManager(cs, repMan, new NodeStatus());

            var actualPing = man.GetPingMsg();

            Assert.Same(expectedPing, actualPing);
        }