public async Task TransferZeroBytesDoesNotReleaseReadAsync() { var testInput = new TestInput(); var context = new ConnectionContext(); context.SocketInput = new SocketInput(new MemoryPool()); var exchanger = new MessageBodyExchanger(testInput.FrameContext); var buffer1 = new byte[1024]; var buffer2 = new byte[1024]; var task1 = exchanger.ReadAsync(new ArraySegment<byte>(buffer1)); var task2 = exchanger.ReadAsync(new ArraySegment<byte>(buffer2)); Assert.False(task1.IsCompleted); Assert.False(task2.IsCompleted); testInput.Add("Hello"); exchanger.Transfer(3, false); var count1 = await task1; Assert.True(task1.IsCompleted); Assert.False(task2.IsCompleted); AssertASCII("Hel", new ArraySegment<byte>(buffer1, 0, count1)); exchanger.Transfer(0, false); Assert.True(task1.IsCompleted); Assert.False(task2.IsCompleted); }
public Frame(ConnectionContext context) : base(context) { FrameControl = this; StatusCode = 200; RequestHeaders = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase); ResponseHeaders = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase); }
public void InitialDictionaryContainsServerAndDate() { var connectionContext = new ConnectionContext { DateHeaderValueManager = new DateHeaderValueManager(), ServerAddress = ServerAddress.FromUrl("http://localhost:5000") }; var frame = new Frame<object>(application: null, context: connectionContext); IDictionary<string, StringValues> headers = frame.ResponseHeaders; Assert.Equal(2, headers.Count); StringValues serverHeader; Assert.True(headers.TryGetValue("Server", out serverHeader)); Assert.Equal(1, serverHeader.Count); Assert.Equal("Kestrel", serverHeader[0]); StringValues dateHeader; DateTime date; Assert.True(headers.TryGetValue("Date", out dateHeader)); Assert.Equal(1, dateHeader.Count); Assert.True(DateTime.TryParse(dateHeader[0], out date)); Assert.True(DateTime.Now - date <= TimeSpan.FromMinutes(1)); Assert.False(headers.IsReadOnly); }
public Frame(ConnectionContext context) : base(context) { FrameControl = this; StatusCode = 200; RequestHeaders = _requestHeaders; ResponseHeaders = _responseHeaders; }
public void ResetResetsScheme() { // Arrange var connectionContext = new ConnectionContext() { DateHeaderValueManager = new DateHeaderValueManager(), ServerAddress = ServerAddress.FromUrl("http://localhost:5000") }; var frame = new Frame<object>(application: null, context: connectionContext); frame.Scheme = "https"; // Act frame.Reset(); // Assert Assert.Equal("http", ((IFeatureCollection)frame).Get<IHttpRequestFeature>().Scheme); }
public void InitialEntriesCanBeCleared() { var connectionContext = new ConnectionContext { DateHeaderValueManager = new DateHeaderValueManager(), ServerAddress = ServerAddress.FromUrl("http://localhost:5000") }; var frame = new Frame<object>(application: null, context: connectionContext); Assert.True(frame.ResponseHeaders.Count > 0); frame.ResponseHeaders.Clear(); Assert.Equal(0, frame.ResponseHeaders.Count); Assert.False(frame.ResponseHeaders.ContainsKey("Server")); Assert.False(frame.ResponseHeaders.ContainsKey("Date")); }
public async Task TransferFinFirstDoesReturnsCompletedReadAsyncs() { var testInput = new TestInput(); var context = new ConnectionContext(); context.SocketInput = new SocketInput(new MemoryPool()); var exchanger = new MessageBodyExchanger(testInput.FrameContext); testInput.Add("Hello"); exchanger.Transfer(5, true); var buffer1 = new byte[1024]; var buffer2 = new byte[1024]; var task1 = exchanger.ReadAsync(new ArraySegment<byte>(buffer1)); var task2 = exchanger.ReadAsync(new ArraySegment<byte>(buffer2)); Assert.True(task1.IsCompleted); Assert.True(task2.IsCompleted); var count1 = await task1; var count2 = await task2; AssertASCII("Hello", new ArraySegment<byte>(buffer1, 0, count1)); Assert.Equal(0, count2); }
public Frame(ConnectionContext context) : base(context) { FrameControl = this; Reset(); }
public FrameContext(ConnectionContext context) : base(context) { }
public ConnectionContext(ConnectionContext context) : base(context) { SocketInput = context.SocketInput; SocketOutput = context.SocketOutput; ConnectionControl = context.ConnectionControl; }
public Frame(ConnectionContext context, IPEndPoint remoteEndPoint, IPEndPoint localEndPoint, Action<IFeatureCollection> prepareRequest) : base(context) { _remoteEndPoint = remoteEndPoint; _localEndPoint = localEndPoint; _prepareRequest = prepareRequest; _pathBase = context.ServerAddress.PathBase; if (ReuseStreams) { _requestBody = new FrameRequestStream(); _responseBody = new FrameResponseStream(this); _duplexStream = new FrameDuplexStream(_requestBody, _responseBody); } FrameControl = this; Reset(); }
public Frame(ConnectionContext context) : this(context, remoteEndPoint: null, localEndPoint: null, prepareRequest: null) { }