diff --git a/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs b/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs new file mode 100644 index 0000000000..8aed0c4498 --- /dev/null +++ b/src/Servers/Kestrel/Core/test/Http2HeadersEnumeratorTests.cs @@ -0,0 +1,88 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2; +using Microsoft.Extensions.Primitives; +using Xunit; + +namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests +{ + public class Http2HeadersEnumeratorTests + { + [Fact] + public void CanIterateOverResponseHeaders() + { + var responseHeaders = new HttpResponseHeaders + { + ContentLength = 9, + HeaderAcceptRanges = "AcceptRanges!", + HeaderAge = new StringValues(new[] { "1", "2" }), + HeaderDate = "Date!" + }; + responseHeaders.Append("Name1", "Value1"); + responseHeaders.Append("Name2", "Value2-1"); + responseHeaders.Append("Name2", "Value2-2"); + responseHeaders.Append("Name3", "Value3"); + + var e = new Http2HeadersEnumerator(); + e.Initialize(responseHeaders); + + var headers = GetNormalizedHeaders(e); + + Assert.Equal(new[] + { + new KeyValuePair("Date", "Date!"), + new KeyValuePair("Accept-Ranges", "AcceptRanges!"), + new KeyValuePair("Age", "1"), + new KeyValuePair("Age", "2"), + new KeyValuePair("Content-Length", "9"), + new KeyValuePair("Name1", "Value1"), + new KeyValuePair("Name2", "Value2-1"), + new KeyValuePair("Name2", "Value2-2"), + new KeyValuePair("Name3", "Value3"), + }, headers); + } + + [Fact] + public void CanIterateOverResponseTrailers() + { + var responseHeaders = new HttpResponseTrailers + { + ContentLength = 9, + HeaderETag = "ETag!" + }; + responseHeaders.Append("Name1", "Value1"); + responseHeaders.Append("Name2", "Value2-1"); + responseHeaders.Append("Name2", "Value2-2"); + responseHeaders.Append("Name3", "Value3"); + + var e = new Http2HeadersEnumerator(); + e.Initialize(responseHeaders); + + var headers = GetNormalizedHeaders(e); + + Assert.Equal(new[] + { + new KeyValuePair("ETag", "ETag!"), + new KeyValuePair("Name1", "Value1"), + new KeyValuePair("Name2", "Value2-1"), + new KeyValuePair("Name2", "Value2-2"), + new KeyValuePair("Name3", "Value3"), + }, headers); + } + + private KeyValuePair[] GetNormalizedHeaders(Http2HeadersEnumerator enumerator) + { + var headers = new List>(); + while (enumerator.MoveNext()) + { + headers.Add(enumerator.Current); + } + return headers.ToArray(); + } + } +}