Allow zero length sends and receives.
This commit is contained in:
parent
1853c71114
commit
704239bca8
|
|
@ -533,11 +533,11 @@ namespace Microsoft.Net.WebSockets
|
|||
{
|
||||
throw new ArgumentNullException("buffer");
|
||||
}
|
||||
if (buffer.Offset < 0 || buffer.Offset >= buffer.Array.Length)
|
||||
if (buffer.Offset < 0 || buffer.Offset > buffer.Array.Length)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("buffer.Offset", buffer.Offset, string.Empty);
|
||||
}
|
||||
if (buffer.Count <= 0 || buffer.Count > buffer.Array.Length - buffer.Offset)
|
||||
if (buffer.Count < 0 || buffer.Count > buffer.Array.Length - buffer.Offset)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("buffer.Count", buffer.Count, string.Empty);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,38 @@ namespace Microsoft.Net.WebSockets.Test
|
|||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendEmptyData_Success()
|
||||
{
|
||||
using (HttpListener listener = new HttpListener())
|
||||
{
|
||||
listener.Prefixes.Add(ServerAddress);
|
||||
listener.Start();
|
||||
Task<HttpListenerContext> serverAccept = listener.GetContextAsync();
|
||||
|
||||
WebSocketClient client = new WebSocketClient();
|
||||
Task<WebSocket> clientConnect = client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None);
|
||||
|
||||
HttpListenerContext serverContext = await serverAccept;
|
||||
Assert.True(serverContext.Request.IsWebSocketRequest);
|
||||
HttpListenerWebSocketContext serverWebSocketContext = await serverContext.AcceptWebSocketAsync(null);
|
||||
|
||||
WebSocket clientSocket = await clientConnect;
|
||||
|
||||
byte[] orriginalData = new byte[0];
|
||||
await clientSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
|
||||
|
||||
byte[] serverBuffer = new byte[orriginalData.Length];
|
||||
WebSocketReceiveResult result = await serverWebSocketContext.WebSocket.ReceiveAsync(new ArraySegment<byte>(serverBuffer), CancellationToken.None);
|
||||
Assert.True(result.EndOfMessage);
|
||||
Assert.Equal(orriginalData.Length, result.Count);
|
||||
Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
|
||||
Assert.Equal(orriginalData, serverBuffer);
|
||||
|
||||
clientSocket.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SendShortData_Success()
|
||||
{
|
||||
|
|
@ -220,6 +252,37 @@ namespace Microsoft.Net.WebSockets.Test
|
|||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ReceiveEmptyData_Success()
|
||||
{
|
||||
using (HttpListener listener = new HttpListener())
|
||||
{
|
||||
listener.Prefixes.Add(ServerAddress);
|
||||
listener.Start();
|
||||
Task<HttpListenerContext> serverAccept = listener.GetContextAsync();
|
||||
|
||||
WebSocketClient client = new WebSocketClient();
|
||||
Task<WebSocket> clientConnect = client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None);
|
||||
|
||||
HttpListenerContext serverContext = await serverAccept;
|
||||
Assert.True(serverContext.Request.IsWebSocketRequest);
|
||||
HttpListenerWebSocketContext serverWebSocketContext = await serverContext.AcceptWebSocketAsync(null);
|
||||
|
||||
WebSocket clientSocket = await clientConnect;
|
||||
|
||||
byte[] orriginalData = Encoding.UTF8.GetBytes("Hello World");
|
||||
await serverWebSocketContext.WebSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
|
||||
|
||||
byte[] clientBuffer = new byte[0];
|
||||
WebSocketReceiveResult result = await clientSocket.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
|
||||
Assert.False(result.EndOfMessage);
|
||||
Assert.Equal(0, result.Count);
|
||||
Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
|
||||
|
||||
clientSocket.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ReceiveShortData_Success()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue