diff --git a/UnitTest/BufferSegment.cs b/UnitTest/BufferSegment.cs index baecd98..1131093 100644 --- a/UnitTest/BufferSegment.cs +++ b/UnitTest/BufferSegment.cs @@ -5,6 +5,8 @@ namespace UnitTest { internal class BufferSegment : ReadOnlySequenceSegment { + public static BufferSegment Empty => new(Memory.Empty); + public BufferSegment(Memory memory) { Memory = memory; diff --git a/UnitTest/HttpTest.cs b/UnitTest/HttpTest.cs index 861b010..aaf2e38 100644 --- a/UnitTest/HttpTest.cs +++ b/UnitTest/HttpTest.cs @@ -4,9 +4,9 @@ using Socks5.Models; using Socks5.Servers; using Socks5.Utils; -using System; using System.Net; using System.Net.Http; +using System.Text; using System.Threading.Tasks; namespace UnitTest @@ -48,18 +48,15 @@ public async Task TestAsync() var httpClient = new HttpClient(handler); var httpsStr = await httpClient.GetStringAsync(@"https://api.ip.sb/ip"); - Console.WriteLine(httpsStr); Assert.IsFalse(string.IsNullOrWhiteSpace(httpsStr)); var httpChunkStr = await httpClient.GetStringAsync(@"http://api.ip.sb/ip"); - Console.WriteLine(httpChunkStr); Assert.IsFalse(string.IsNullOrWhiteSpace(httpChunkStr)); Assert.AreEqual(httpsStr, httpChunkStr); httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(@"curl/7.55.1"); var httpStr = await httpClient.GetStringAsync(@"http://ip.sb"); - Console.WriteLine(httpStr); Assert.IsFalse(string.IsNullOrWhiteSpace(httpStr)); Assert.AreEqual(httpChunkStr, httpStr); @@ -82,5 +79,38 @@ public async Task TestAsync() server.Stop(); } } + + [TestMethod] + public void IsHttpHeaderTest() + { + var sequence0 = TestUtils.GetMultiSegmentSequence( + Encoding.ASCII.GetBytes("GET / HTTP/1.1"), + Encoding.ASCII.GetBytes("\r\nHost: ip.sb\r\n"), + Encoding.ASCII.GetBytes("User-Agent: curl/7.55.1\r\n"), + Encoding.ASCII.GetBytes("\r\n") + ); + Assert.IsTrue(HttpUtils.IsHttpHeader(sequence0)); + + var sequence1 = TestUtils.GetMultiSegmentSequence( + Encoding.ASCII.GetBytes("GET / HTTP/1.1"), + Encoding.ASCII.GetBytes("\r\nHost: ip.sb\r\n"), + Encoding.ASCII.GetBytes("User-Agent: curl/7.55.1\r\n") + ); + Assert.IsFalse(HttpUtils.IsHttpHeader(sequence1)); + + var sequence2 = TestUtils.GetMultiSegmentSequence( + Encoding.ASCII.GetBytes("\r\n"), + Encoding.ASCII.GetBytes("\r\n") + ); + Assert.IsFalse(HttpUtils.IsHttpHeader(sequence2)); + + var sequence3 = TestUtils.GetMultiSegmentSequence( + Encoding.ASCII.GetBytes("GET HTTP/1.1"), + Encoding.ASCII.GetBytes("\r\nHost: ip.sb\r\n"), + Encoding.ASCII.GetBytes("User-Agent: curl/7.55.1\r\n"), + Encoding.ASCII.GetBytes("\r\n") + ); + Assert.IsFalse(HttpUtils.IsHttpHeader(sequence3)); + } } } diff --git a/UnitTest/TestUtils.cs b/UnitTest/TestUtils.cs index 26c204e..f905a3e 100644 --- a/UnitTest/TestUtils.cs +++ b/UnitTest/TestUtils.cs @@ -12,12 +12,12 @@ public static ReadOnlySequence GetMultiSegmentSequence(Memory source { Requires.Argument(index.LongLength > 1, nameof(index), @"index length must >1"); var orderedIndex = index.OrderBy(x => x); - var first = new BufferSegment(source[..orderedIndex.First()]); + var first = BufferSegment.Empty; var last = first; - var length = index[0]; + var length = 0; - foreach (var i in index.Skip(1)) + foreach (var i in orderedIndex) { last = last.Append(source.Slice(length, i - length)); length = i; @@ -27,6 +27,22 @@ public static ReadOnlySequence GetMultiSegmentSequence(Memory source var sequence = new ReadOnlySequence(first, 0, last, last.Memory.Length); Assert.AreEqual(source.Length, sequence.Length); + + return sequence; + } + + public static ReadOnlySequence GetMultiSegmentSequence(params Memory[] memories) + { + Requires.Argument(memories.LongLength > 1, nameof(memories), @"index length must >1"); + var first = BufferSegment.Empty; + + var last = memories.Aggregate(first, (current, memory) => current.Append(memory)); + + var sequence = new ReadOnlySequence(first, 0, last, last.Memory.Length); + + var length = memories.Sum(x => (long)x.Length); + Assert.AreEqual(length, sequence.Length); + return sequence; } }