Ejemplo n.º 1
0
        public void ReadMultipleRequests()
        {
            var multipleRequestBytes = new byte [requestBytes.Length * 5];

            for (int i = 0; i < 5; i++)
            {
                Array.Copy(requestBytes, 0, multipleRequestBytes, i * requestBytes.Length, requestBytes.Length);
            }
            var byteStream = new TestStream(multipleRequestBytes);
            var rpcStream  = new RPCStream(byteStream);

            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(0, rpcStream.BytesRead);
            for (int i = 0; i < 5; i++)
            {
                Assert.IsTrue(rpcStream.DataAvailable);
                Assert.AreEqual(0, rpcStream.BytesWritten);
                Assert.AreEqual(multipleRequestBytes.Length, rpcStream.BytesRead);
                Request request = rpcStream.Read();
                if (i < 4)
                {
                    Assert.IsTrue(rpcStream.DataAvailable);
                }
                else
                {
                    Assert.IsFalse(rpcStream.DataAvailable);
                    Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
                }
                Assert.AreEqual(expectedRequest.Service, request.Service);
                Assert.AreEqual(expectedRequest.Procedure, request.Procedure);
                Assert.AreEqual(0, rpcStream.BytesWritten);
                Assert.AreEqual(multipleRequestBytes.Length, rpcStream.BytesRead);
            }
            Assert.IsFalse(byteStream.Closed);
        }
Ejemplo n.º 2
0
        public void ReadSingleRequestInParts()
        {
            // Split the message bytes into 3 parts
            Assert.IsTrue(requestBytes.Length > 15);
            var part1 = new byte[4];
            var part2 = new byte[6];
            var part3 = new byte[requestBytes.Length - 10];

            Array.Copy(requestBytes, 0, part1, 0, part1.Length);
            Array.Copy(requestBytes, part1.Length, part2, 0, part2.Length);
            Array.Copy(requestBytes, part1.Length + part2.Length, part3, 0, part3.Length);

            // Write part 1
            var stream = new MemoryStream();

            stream.Write(part1, 0, part1.Length);
            stream.Seek(0, SeekOrigin.Begin);

            // Read part 1
            var byteStream = new TestStream(stream);
            var rpcStream  = new RPCStream(byteStream);

            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(part1.Length, rpcStream.BytesRead);

            // Write part 2
            Assert.AreEqual(part1.Length, stream.Position);
            stream.Write(part2, 0, part2.Length);
            stream.Seek(part1.Length, SeekOrigin.Begin);

            // Read part 2
            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(part1.Length + part2.Length, rpcStream.BytesRead);

            // Write part 3
            Assert.AreEqual(part1.Length + part2.Length, stream.Position);
            stream.Write(part3, 0, part3.Length);
            stream.Seek(-part3.Length, SeekOrigin.Current);

            // Read part 3
            Assert.IsTrue(rpcStream.DataAvailable);
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(part1.Length + part2.Length + part3.Length, rpcStream.BytesRead);
            Request request = rpcStream.Read();

            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(part1.Length + part2.Length + part3.Length, rpcStream.BytesRead);
            Assert.AreEqual(expectedRequest.Calls.Count, request.Calls.Count);
            Assert.AreEqual(expectedRequest.Calls [0].Service, request.Calls [0].Service);
            Assert.AreEqual(expectedRequest.Calls [0].Procedure, request.Calls [0].Procedure);
            Assert.IsFalse(byteStream.Closed);
        }
Ejemplo n.º 3
0
 public void ReadGarbage()
 {
     var data = new byte[RPCStream.bufferSize + 1];
     var rand = new Random (42);
     rand.NextBytes (data);
     var rpcStream = new RPCStream (new TestStream (new MemoryStream (data), null));
     Assert.Throws<RequestBufferOverflowException> (() => rpcStream.Read ());
 }
Ejemplo n.º 4
0
 public void ReadSingleRequest()
 {
     var stream = new TestStream (new MemoryStream (requestBytes), null);
     var rpcStream = new RPCStream (stream);
     Assert.IsTrue (rpcStream.DataAvailable);
     Request request = rpcStream.Read ();
     Assert.IsFalse (rpcStream.DataAvailable);
     Assert.AreEqual (expectedRequest.Service, request.Service);
     Assert.AreEqual (expectedRequest.Procedure, request.Procedure);
 }
Ejemplo n.º 5
0
        public void ReadSingleRequest()
        {
            var byteStream = new TestStream(requestBytes);
            var rpcStream  = new RPCStream(byteStream);

            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(0, rpcStream.BytesRead);
            Assert.IsTrue(rpcStream.DataAvailable);
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(requestBytes.Length, rpcStream.BytesRead);
            Request request = rpcStream.Read();

            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
            Assert.AreEqual(expectedRequest.Service, request.Service);
            Assert.AreEqual(expectedRequest.Procedure, request.Procedure);
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(requestBytes.Length, rpcStream.BytesRead);
            Assert.IsFalse(byteStream.Closed);
        }
Ejemplo n.º 6
0
        public void Empty()
        {
            var byteStream = new TestStream(new MemoryStream());
            var rpcStream  = new RPCStream(byteStream);

            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.Throws <KRPC.Server.Message.NoRequestException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(0, rpcStream.BytesRead);
            Assert.IsFalse(byteStream.Closed);
        }
Ejemplo n.º 7
0
        public void ReadGarbage()
        {
            var data = new byte[RPCStream.bufferSize + 1];
            var rand = new Random(42);

            rand.NextBytes(data);
            var rpcStream = new RPCStream(new TestStream(new MemoryStream(data), null));

            Assert.Throws <RequestBufferOverflowException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(data.Length - 1, rpcStream.BytesRead);
        }
Ejemplo n.º 8
0
 public void ReadMalformedRequest()
 {
     // A request without all of the required fields filled in
     var builder = Request.CreateBuilder ();
     builder.Service = "SomeServiceName";
     expectedRequest = builder.BuildPartial ();
     var stream = new MemoryStream ();
     expectedRequest.WriteDelimitedTo (stream);
     stream.Seek (0, SeekOrigin.Begin);
     var rpcStream = new RPCStream (new TestStream (stream, null));
     Assert.Throws<MalformedRequestException> (() => rpcStream.Read ());
 }
Ejemplo n.º 9
0
        public void ReadGarbage()
        {
            var data = new byte [4000];
            var rand = new Random(42);

            rand.NextBytes(data);
            var byteStream = new TestStream(data);
            var rpcStream  = new RPCStream(byteStream);

            Assert.Throws <KRPC.Server.Message.MalformedRequestException> (() => rpcStream.Read());
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(data.Length, rpcStream.BytesRead);
            Assert.IsTrue(byteStream.Closed);
        }
Ejemplo n.º 10
0
        public void ReadSingleRequest()
        {
            var stream    = new TestStream(new MemoryStream(requestBytes), null);
            var rpcStream = new RPCStream(stream);

            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(0, rpcStream.BytesRead);
            Assert.IsTrue(rpcStream.DataAvailable);
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(requestBytes.Length, rpcStream.BytesRead);
            Request request = rpcStream.Read();

            Assert.IsFalse(rpcStream.DataAvailable);
            Assert.AreEqual(expectedRequest.Service, request.Service);
            Assert.AreEqual(expectedRequest.Procedure, request.Procedure);
            Assert.AreEqual(0, rpcStream.BytesWritten);
            Assert.AreEqual(requestBytes.Length, rpcStream.BytesRead);
        }
Ejemplo n.º 11
0
        public void ReadSingleRequestInParts()
        {
            // Split the message bytes into 3 parts
            Assert.IsTrue (requestBytes.Length > 15);
            var part1 = new byte[4];
            var part2 = new byte[6];
            var part3 = new byte[requestBytes.Length - 10];
            Array.Copy (requestBytes, 0, part1, 0, part1.Length);
            Array.Copy (requestBytes, part1.Length, part2, 0, part2.Length);
            Array.Copy (requestBytes, part1.Length + part2.Length, part3, 0, part3.Length);

            // Write part 1
            var stream = new MemoryStream ();
            stream.Write (part1, 0, part1.Length);
            stream.Seek (0, SeekOrigin.Begin);

            // Read part 1
            var rpcStream = new RPCStream (new TestStream (stream, null));
            Assert.IsFalse (rpcStream.DataAvailable);
            Assert.AreEqual (0, rpcStream.BytesWritten);
            Assert.AreEqual (part1.Length, rpcStream.BytesRead);

            // Write part 2
            Assert.AreEqual (part1.Length, stream.Position);
            stream.Write (part2, 0, part2.Length);
            stream.Seek (part1.Length, SeekOrigin.Begin);

            // Read part 2
            Assert.IsFalse (rpcStream.DataAvailable);
            Assert.AreEqual (0, rpcStream.BytesWritten);
            Assert.AreEqual (part1.Length + part2.Length, rpcStream.BytesRead);

            // Write part 3
            Assert.AreEqual (part1.Length + part2.Length, stream.Position);
            stream.Write (part3, 0, part3.Length);
            stream.Seek (-part3.Length, SeekOrigin.Current);

            // Read part 3
            Assert.IsTrue (rpcStream.DataAvailable);
            Assert.AreEqual (0, rpcStream.BytesWritten);
            Assert.AreEqual (part1.Length + part2.Length + part3.Length, rpcStream.BytesRead);
            Request request = rpcStream.Read ();
            Assert.IsFalse (rpcStream.DataAvailable);
            Assert.AreEqual (0, rpcStream.BytesWritten);
            Assert.AreEqual (part1.Length + part2.Length + part3.Length, rpcStream.BytesRead);
            Assert.AreEqual (expectedRequest.Service, request.Service);
            Assert.AreEqual (expectedRequest.Procedure, request.Procedure);
        }