Skip to content
This repository was archived by the owner on Dec 18, 2018. It is now read-only.

Commit d141dc9

Browse files
committed
Test fix
1 parent c6c58ac commit d141dc9

File tree

2 files changed

+139
-79
lines changed

2 files changed

+139
-79
lines changed

test/Microsoft.AspNet.Server.KestrelTests/AsciiDecoder.cs

Lines changed: 81 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Linq;
6+
using System.Runtime.InteropServices;
67
using Microsoft.AspNet.Server.Kestrel.Infrastructure;
78
using Xunit;
89

@@ -15,90 +16,113 @@ private void FullByteRangeSupported()
1516
{
1617
var byteRange = Enumerable.Range(0, 256).Select(x => (byte)x).ToArray();
1718

18-
var mem = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
19-
mem.End = byteRange.Length;
19+
var handle = GCHandle.Alloc(byteRange, GCHandleType.Pinned);
20+
try
21+
{
22+
var mem = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), handle.AddrOfPinnedObject(), null, null);
23+
mem.End = byteRange.Length;
2024

21-
var begin = mem.GetIterator();
22-
var end = GetIterator(begin, byteRange.Length);
25+
var begin = mem.GetIterator();
26+
var end = GetIterator(begin, byteRange.Length);
2327

24-
var s = begin.GetAsciiString(end);
28+
var s = begin.GetAsciiString(end);
2529

26-
Assert.Equal(s.Length, byteRange.Length);
30+
Assert.Equal(s.Length, byteRange.Length);
2731

28-
for (var i = 0; i < byteRange.Length; i++)
29-
{
30-
var sb = (byte)s[i];
31-
var b = byteRange[i];
32+
for (var i = 0; i < byteRange.Length; i++)
33+
{
34+
var sb = (byte)s[i];
35+
var b = byteRange[i];
3236

33-
Assert.Equal(sb, b);
37+
Assert.Equal(sb, b);
38+
}
39+
}
40+
finally
41+
{
42+
handle.Free();
3443
}
3544
}
3645

3746
[Fact]
3847
private void MultiBlockProducesCorrectResults()
3948
{
4049
var byteRange = Enumerable.Range(0, 512 + 64).Select(x => (byte)x).ToArray();
41-
var expectedByteRange = byteRange
42-
.Concat(byteRange)
43-
.Concat(byteRange)
44-
.Concat(byteRange)
45-
.ToArray();
46-
47-
var mem0 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
48-
var mem1 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
49-
var mem2 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
50-
var mem3 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
51-
mem0.End = byteRange.Length;
52-
mem1.End = byteRange.Length;
53-
mem2.End = byteRange.Length;
54-
mem3.End = byteRange.Length;
55-
56-
mem0.Next = mem1;
57-
mem1.Next = mem2;
58-
mem2.Next = mem3;
59-
60-
var begin = mem0.GetIterator();
61-
var end = GetIterator(begin, expectedByteRange.Length);
62-
63-
var s = begin.GetAsciiString(end);
64-
65-
Assert.Equal(s.Length, expectedByteRange.Length);
66-
67-
for (var i = 0; i < expectedByteRange.Length; i++)
50+
var handle = GCHandle.Alloc(byteRange, GCHandleType.Pinned);
51+
try
6852
{
69-
var sb = (byte)s[i];
70-
var b = expectedByteRange[i];
71-
72-
Assert.Equal(sb, b);
53+
var expectedByteRange = byteRange
54+
.Concat(byteRange)
55+
.Concat(byteRange)
56+
.Concat(byteRange)
57+
.ToArray();
58+
59+
var mem0 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
60+
var mem1 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
61+
var mem2 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
62+
var mem3 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
63+
mem0.End = byteRange.Length;
64+
mem1.End = byteRange.Length;
65+
mem2.End = byteRange.Length;
66+
mem3.End = byteRange.Length;
67+
68+
mem0.Next = mem1;
69+
mem1.Next = mem2;
70+
mem2.Next = mem3;
71+
72+
var begin = mem0.GetIterator();
73+
var end = GetIterator(begin, expectedByteRange.Length);
74+
75+
var s = begin.GetAsciiString(end);
76+
77+
Assert.Equal(s.Length, expectedByteRange.Length);
78+
79+
for (var i = 0; i < expectedByteRange.Length; i++)
80+
{
81+
var sb = (byte)s[i];
82+
var b = expectedByteRange[i];
83+
84+
Assert.Equal(sb, b);
85+
}
86+
}
87+
finally
88+
{
89+
handle.Free();
7390
}
7491
}
7592

7693
[Fact]
7794
private void LargeAllocationProducesCorrectResults()
7895
{
7996
var byteRange = Enumerable.Range(0, 16384 + 64).Select(x => (byte)x).ToArray();
80-
var expectedByteRange = byteRange.Concat(byteRange).ToArray();
97+
var handle = GCHandle.Alloc(byteRange, GCHandleType.Pinned);
98+
try {
99+
var expectedByteRange = byteRange.Concat(byteRange).ToArray();
81100

82-
var mem0 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
83-
var mem1 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
84-
mem0.End = byteRange.Length;
85-
mem1.End = byteRange.Length;
101+
var mem0 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
102+
var mem1 = MemoryPoolBlock2.Create(new ArraySegment<byte>(byteRange), IntPtr.Zero, null, null);
103+
mem0.End = byteRange.Length;
104+
mem1.End = byteRange.Length;
86105

87-
mem0.Next = mem1;
106+
mem0.Next = mem1;
88107

89-
var begin = mem0.GetIterator();
90-
var end = GetIterator(begin, expectedByteRange.Length);
108+
var begin = mem0.GetIterator();
109+
var end = GetIterator(begin, expectedByteRange.Length);
91110

92-
var s = begin.GetAsciiString(end);
111+
var s = begin.GetAsciiString(end);
93112

94-
Assert.Equal(s.Length, expectedByteRange.Length);
113+
Assert.Equal(s.Length, expectedByteRange.Length);
95114

96-
for (var i = 0; i < expectedByteRange.Length; i++)
97-
{
98-
var sb = (byte)s[i];
99-
var b = expectedByteRange[i];
115+
for (var i = 0; i < expectedByteRange.Length; i++)
116+
{
117+
var sb = (byte)s[i];
118+
var b = expectedByteRange[i];
100119

101-
Assert.Equal(sb, b);
120+
Assert.Equal(sb, b);
121+
}
122+
}
123+
finally
124+
{
125+
handle.Free();
102126
}
103127
}
104128

test/Microsoft.AspNet.Server.KestrelTests/UrlPathDecoder.cs

Lines changed: 58 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Linq;
6+
using System.Runtime.InteropServices;
67
using Microsoft.AspNet.Server.Kestrel.Http;
78
using Microsoft.AspNet.Server.Kestrel.Infrastructure;
89
using Xunit;
@@ -111,20 +112,28 @@ public void InvalidUTF8(string raw, string expect)
111112
[InlineData("%C2%B5%40%C3%9F%C3%B6%C3%A4%C3%BC%C3%A0%C3%A1", 44, "µ@ßöäüà%C3%A", 12)]
112113
public void DecodeWithBoundary(string raw, int rawLength, string expect, int expectLength)
113114
{
114-
var begin = BuildSample(raw);
115-
var end = GetIterator(begin, rawLength);
115+
var store = raw.Select(c => (byte)c).ToArray();
116+
var handle = GCHandle.Alloc(store, GCHandleType.Pinned);
117+
try
118+
{
119+
var begin = BuildSample(store, handle.AddrOfPinnedObject());
120+
var end = GetIterator(begin, rawLength);
116121

117-
var end2 = UrlPathDecoder.Unescape(begin, end);
118-
var result = begin.GetUtf8String(end2);
122+
var end2 = UrlPathDecoder.Unescape(begin, end);
123+
var result = begin.GetUtf8String(end2);
119124

120-
Assert.Equal(expectLength, result.Length);
121-
Assert.Equal(expect, result);
125+
Assert.Equal(expectLength, result.Length);
126+
Assert.Equal(expect, result);
127+
}
128+
finally
129+
{
130+
handle.Free();
131+
}
122132
}
123133

124-
private MemoryPoolIterator2 BuildSample(string data)
134+
private MemoryPoolIterator2 BuildSample(byte[] store, IntPtr dataPtr)
125135
{
126-
var store = data.Select(c => (byte)c).ToArray();
127-
var mem = MemoryPoolBlock2.Create(new ArraySegment<byte>(store), IntPtr.Zero, null, null);
136+
var mem = MemoryPoolBlock2.Create(new ArraySegment<byte>(store), dataPtr, null, null);
128137
mem.End = store.Length;
129138

130139
return mem.GetIterator();
@@ -143,30 +152,57 @@ private MemoryPoolIterator2 GetIterator(MemoryPoolIterator2 begin, int displacem
143152

144153
private void PositiveAssert(string raw, string expect)
145154
{
146-
var begin = BuildSample(raw);
147-
var end = GetIterator(begin, raw.Length);
155+
var store = raw.Select(c => (byte)c).ToArray();
156+
var handle = GCHandle.Alloc(store, GCHandleType.Pinned);
157+
try
158+
{
159+
var begin = BuildSample(store, handle.AddrOfPinnedObject());
160+
var end = GetIterator(begin, raw.Length);
148161

149-
var result = UrlPathDecoder.Unescape(begin, end);
150-
Assert.Equal(expect, begin.GetUtf8String(result));
162+
var result = UrlPathDecoder.Unescape(begin, end);
163+
Assert.Equal(expect, begin.GetUtf8String(result));
164+
}
165+
finally
166+
{
167+
handle.Free();
168+
}
151169
}
152170

153171
private void PositiveAssert(string raw)
154172
{
155-
var begin = BuildSample(raw);
156-
var end = GetIterator(begin, raw.Length);
173+
var store = raw.Select(c => (byte)c).ToArray();
174+
var handle = GCHandle.Alloc(store, GCHandleType.Pinned);
175+
try
176+
{
177+
var begin = BuildSample(store, handle.AddrOfPinnedObject());
178+
var end = GetIterator(begin, raw.Length);
157179

158-
var result = UrlPathDecoder.Unescape(begin, end);
159-
Assert.NotEqual(raw.Length, begin.GetUtf8String(result).Length);
180+
var result = UrlPathDecoder.Unescape(begin, end);
181+
Assert.NotEqual(raw.Length, begin.GetUtf8String(result).Length);
182+
}
183+
finally
184+
{
185+
handle.Free();
186+
}
160187
}
161188

162189
private void NegativeAssert(string raw)
163190
{
164-
var begin = BuildSample(raw);
165-
var end = GetIterator(begin, raw.Length);
191+
var store = raw.Select(c => (byte)c).ToArray();
192+
var handle = GCHandle.Alloc(store, GCHandleType.Pinned);
193+
try
194+
{
195+
var begin = BuildSample(store, handle.AddrOfPinnedObject());
196+
var end = GetIterator(begin, raw.Length);
166197

167-
var resultEnd = UrlPathDecoder.Unescape(begin, end);
168-
var result = begin.GetUtf8String(resultEnd);
169-
Assert.Equal(raw, result);
198+
var resultEnd = UrlPathDecoder.Unescape(begin, end);
199+
var result = begin.GetUtf8String(resultEnd);
200+
Assert.Equal(raw, result);
201+
}
202+
finally
203+
{
204+
handle.Free();
205+
}
170206
}
171207
}
172208
}

0 commit comments

Comments
 (0)