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); }
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); }
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 ()); }
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); }
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); }
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); }
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); }
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 ()); }
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); }
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); }
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); }