Fix build warnings in the StreamDemuxerTests (#259)

* Make sure StreamDemuxer.Start() returns immediately.

* Make MockWebSocket.RecieveAsync cancellable

* Fix staging
This commit is contained in:
Frederik Carlier
2019-03-20 16:53:04 +01:00
committed by Kubernetes Prow Robot
parent 4bcfaeb6dc
commit 9ae3cb38fc
3 changed files with 24 additions and 19 deletions

View File

@@ -182,6 +182,9 @@ namespace k8s
protected async Task RunLoop(CancellationToken cancellationToken)
{
// This is a background task. Immediately yield to the caller.
await Task.Yield();
// Get a 1KB buffer
byte[] buffer = ArrayPool<byte>.Shared.Rent(1024 * 1024);
// This maps remembers bytes skipped for each stream.

View File

@@ -1,3 +1,4 @@
using Nito.AsyncEx;
using System;
using System.Collections.Concurrent;
using System.Net.WebSockets;
@@ -13,7 +14,7 @@ namespace k8s.tests.Mock
private WebSocketState state;
private string subProtocol;
private ConcurrentQueue<MessageData> receiveBuffers = new ConcurrentQueue<MessageData>();
private AutoResetEvent receiveEvent = new AutoResetEvent(false);
private AsyncAutoResetEvent receiveEvent = new AsyncAutoResetEvent(false);
public MockWebSocket(string subProtocol = null)
{
@@ -78,12 +79,13 @@ namespace k8s.tests.Mock
this.receiveEvent.Set();
}
public override Task<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken)
public override async Task<WebSocketReceiveResult> ReceiveAsync(ArraySegment<byte> buffer, CancellationToken cancellationToken)
{
if (this.receiveBuffers.Count == 0)
{
this.receiveEvent.WaitOne();
await this.receiveEvent.WaitAsync(cancellationToken).ConfigureAwait(false);
}
int bytesReceived = 0;
bool endOfMessage = true;
WebSocketMessageType messageType = WebSocketMessageType.Close;
@@ -107,7 +109,8 @@ namespace k8s.tests.Mock
received.Buffer = received.Buffer.Slice(buffer.Count);
}
}
return Task.FromResult(new WebSocketReceiveResult(bytesReceived, messageType, endOfMessage));
return new WebSocketReceiveResult(bytesReceived, messageType, endOfMessage);
}
public override Task SendAsync(ArraySegment<byte> buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken)

View File

@@ -24,6 +24,7 @@ namespace k8s.Tests
public async Task SendDataRemoteCommand()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws))
{
List<byte> sentBuffer = new List<byte>();
ws.MessageSent += (sender, args) =>
@@ -31,8 +32,7 @@ namespace k8s.Tests
sentBuffer.AddRange(args.Data.Buffer);
};
StreamDemuxer demuxer = new StreamDemuxer(ws);
Task.Run(() => demuxer.Start());
demuxer.Start();
byte channelIndex = 12;
var stream = demuxer.GetStream(channelIndex, channelIndex);
@@ -50,6 +50,7 @@ namespace k8s.Tests
public async Task SendMultipleDataRemoteCommand()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws))
{
List<byte> sentBuffer = new List<byte>();
ws.MessageSent += (sender, args) =>
@@ -57,8 +58,7 @@ namespace k8s.Tests
sentBuffer.AddRange(args.Data.Buffer);
};
StreamDemuxer demuxer = new StreamDemuxer(ws);
Task.Run(() => demuxer.Start());
demuxer.Start();
byte channelIndex = 12;
var stream = demuxer.GetStream(channelIndex, channelIndex);
@@ -80,9 +80,9 @@ namespace k8s.Tests
public async Task ReceiveDataRemoteCommand()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws))
{
StreamDemuxer demuxer = new StreamDemuxer(ws);
Task.Run(() => demuxer.Start());
demuxer.Start();
List<byte> receivedBuffer = new List<byte>();
byte channelIndex = 12;
@@ -129,9 +129,9 @@ namespace k8s.Tests
public async Task ReceiveDataPortForward()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward))
{
StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward);
Task.Run(() => demuxer.Start());
demuxer.Start();
List<byte> receivedBuffer = new List<byte>();
byte channelIndex = 12;
@@ -179,9 +179,9 @@ namespace k8s.Tests
public async Task ReceiveDataPortForwardOneByteMessage()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward))
{
StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward);
Task.Run(() => demuxer.Start());
demuxer.Start();
List<byte> receivedBuffer = new List<byte>();
byte channelIndex = 12;
@@ -227,9 +227,9 @@ namespace k8s.Tests
public async Task ReceiveDataRemoteCommandMultipleStream()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws))
{
StreamDemuxer demuxer = new StreamDemuxer(ws);
Task.Run(() => demuxer.Start());
demuxer.Start();
List<byte> receivedBuffer1 = new List<byte>();
byte channelIndex1 = 1;
@@ -304,9 +304,9 @@ namespace k8s.Tests
public async Task ReceiveDataPortForwardMultipleStream()
{
using (MockWebSocket ws = new MockWebSocket())
using (StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward))
{
StreamDemuxer demuxer = new StreamDemuxer(ws, StreamType.PortForward);
Task.Run(() => demuxer.Start());
demuxer.Start();
List<byte> receivedBuffer1 = new List<byte>();
byte channelIndex1 = 1;
@@ -379,7 +379,6 @@ namespace k8s.Tests
}
}
private static byte[] GenerateRandomBuffer(int length, byte channelIndex, byte content, bool portForward)
{
var buffer = GenerateRandomBuffer(length, content);