Пример #1
0
        public void BadRequestResultTest()
        {
            var guid       = Guid.NewGuid().ToByteArray();
            var identifier = Guid.NewGuid().ToByteArray();
            var client     = new SimpleTcpClient();
            var bootstrap  = new ServerBootstrap(EndPointDispatcher.GetRandomPort());

            Assert.IsTrue(bootstrap.StartUp());
            Assert.IsTrue(client.Connect(bootstrap.EndPoint));
            var buffer = ByteBufferAllocator.Instance.Allocate(48);

            buffer.AutoExpand = true;
            var body = new Json().Serialize(new Entity
            {
                Name = "a1",
                Nest = new Nest {
                    Age = 2
                },
                Task = Desc
            }).Zip();

            buffer.PutInt32(49 + body.Length);
            buffer.Put(1);
            buffer.PutInt16(1);
            buffer.Put(ErrorCode.NoError.ToByte());
            buffer.Put(MessageType.Command.ToByte());
            buffer.Put(identifier);
            buffer.Put(guid);
            buffer.Put((MessageFilterType.Checksum | MessageFilterType.Compression).ToByte());
            buffer.Put(new byte[] { 0, 0 });
            buffer.Put(SerializeMode.Json.ToByte());
            buffer.Position = 0;
            var header = buffer.GetArray(45);

            buffer.Put(BitConverter.GetBytes(Crc32.CalculateDigest(header.Concat(body), (uint)0, (uint)(header.Length + body.Length))));
            buffer.Position = buffer.Position - 1; // make crc error
            buffer.Put(4);
            buffer.Put(body);
            Assert.IsTrue(client.Send(buffer));
            var input = client.Receive();

            Assert.AreEqual(49, input.GetInt32());
            Assert.AreEqual(1, input.Get());
            Assert.AreEqual(CommandCode.BadRequest, input.GetInt16().ToEnum <CommandCode>());
            Assert.AreEqual(ErrorCode.DataBroken, input.Get().ToEnum <ErrorCode>());
            Assert.AreEqual(MessageType.CommandAck, input.Get().ToEnum <MessageType>());
            Assert.AreEqual(identifier.ToHex(), input.GetArray(16).ToHex());
            Assert.AreEqual(Convert.ToBase64String(guid), Convert.ToBase64String(input.GetArray(16)));
            Assert.AreEqual(MessageFilterType.Checksum, input.Get().ToEnum <MessageFilterType>());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(SerializeMode.None, input.Get().ToEnum <SerializeMode>());
            input.Position = 0;
            var header2 = input.GetArray(45);

            Crc32.VerifyDigest(BitConverter.ToUInt32(input.GetArray(4), 0), header2, 0, 45);

            Assert.IsTrue(client.Send(buffer));
            input = client.Receive();
            Assert.AreEqual(49, input.GetInt32());
            Assert.AreEqual(1, input.Get());
            Assert.AreEqual(CommandCode.BadRequest, input.GetInt16().ToEnum <CommandCode>());
            Assert.AreEqual(ErrorCode.DataBroken, input.Get().ToEnum <ErrorCode>());
            Assert.AreEqual(MessageType.CommandAck, input.Get().ToEnum <MessageType>());
            Assert.AreEqual(identifier.ToHex(), input.GetArray(16).ToHex());
            Assert.AreEqual(Convert.ToBase64String(guid), Convert.ToBase64String(input.GetArray(16)));
            Assert.AreEqual(MessageFilterType.Checksum, input.Get().ToEnum <MessageFilterType>());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(SerializeMode.None, input.Get().ToEnum <SerializeMode>());
            input.Position = 0;
            header2        = input.GetArray(45);
            Crc32.VerifyDigest(BitConverter.ToUInt32(input.GetArray(4), 0), header2, 0, 45);


            client.Close();
        }
Пример #2
0
        public void BadRequestResultTest()
        {
            var guid = Guid.NewGuid().ToByteArray();
            var identifier = Guid.NewGuid().ToByteArray();
            var client = new SimpleTcpClient();
            var bootstrap = new ServerBootstrap(EndPointDispatcher.GetRandomPort());
            Assert.IsTrue(bootstrap.StartUp());
            Assert.IsTrue(client.Connect(bootstrap.EndPoint));
            var buffer = ByteBufferAllocator.Instance.Allocate(48);
            buffer.AutoExpand = true;
            var body = new Json().Serialize(new Entity
            {
                Name = "a1",
                Nest = new Nest { Age = 2 },
                Task = Desc
            }).Zip();

            buffer.PutInt32(49 + body.Length);
            buffer.Put(1);
            buffer.PutInt16(1);
            buffer.Put(ErrorCode.NoError.ToByte());
            buffer.Put(MessageType.Command.ToByte());
            buffer.Put(identifier);
            buffer.Put(guid);
            buffer.Put((MessageFilterType.Checksum | MessageFilterType.Compression).ToByte());
            buffer.Put(new byte[] { 0, 0 });
            buffer.Put(SerializeMode.Json.ToByte());
            buffer.Position = 0;
            var header = buffer.GetArray(45);
            buffer.Put(BitConverter.GetBytes(Crc32.CalculateDigest(header.Concat(body), (uint)0, (uint)(header.Length + body.Length))));
            buffer.Position = buffer.Position - 1; // make crc error
            buffer.Put(4);
            buffer.Put(body);
            Assert.IsTrue(client.Send(buffer));
            var input = client.Receive();
            Assert.AreEqual(49, input.GetInt32());
            Assert.AreEqual(1, input.Get());
            Assert.AreEqual(CommandCode.BadRequest, input.GetInt16().ToEnum<CommandCode>());
            Assert.AreEqual(ErrorCode.DataBroken, input.Get().ToEnum<ErrorCode>());
            Assert.AreEqual(MessageType.CommandAck, input.Get().ToEnum<MessageType>());
            Assert.AreEqual(identifier.ToHex(), input.GetArray(16).ToHex());
            Assert.AreEqual(Convert.ToBase64String(guid), Convert.ToBase64String(input.GetArray(16)));
            Assert.AreEqual(MessageFilterType.Checksum, input.Get().ToEnum<MessageFilterType>());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(SerializeMode.None, input.Get().ToEnum<SerializeMode>());
            input.Position = 0;
            var header2 = input.GetArray(45);
            Crc32.VerifyDigest(BitConverter.ToUInt32(input.GetArray(4), 0), header2, 0, 45);

            Assert.IsTrue(client.Send(buffer));
            input = client.Receive();
            Assert.AreEqual(49, input.GetInt32());
            Assert.AreEqual(1, input.Get());
            Assert.AreEqual(CommandCode.BadRequest, input.GetInt16().ToEnum<CommandCode>());
            Assert.AreEqual(ErrorCode.DataBroken, input.Get().ToEnum<ErrorCode>());
            Assert.AreEqual(MessageType.CommandAck, input.Get().ToEnum<MessageType>());
            Assert.AreEqual(identifier.ToHex(), input.GetArray(16).ToHex());
            Assert.AreEqual(Convert.ToBase64String(guid), Convert.ToBase64String(input.GetArray(16)));
            Assert.AreEqual(MessageFilterType.Checksum, input.Get().ToEnum<MessageFilterType>());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(0, input.Get());
            Assert.AreEqual(SerializeMode.None, input.Get().ToEnum<SerializeMode>());
            input.Position = 0;
            header2 = input.GetArray(45);
            Crc32.VerifyDigest(BitConverter.ToUInt32(input.GetArray(4), 0), header2, 0, 45);


            client.Close();
        }