Add 100% coverage Take tests
This commit is contained in:
parent
dc90dd1649
commit
ba0b7cc553
|
|
@ -1053,6 +1053,129 @@ namespace Microsoft.AspNetCore.Server.KestrelTests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestTake()
|
||||||
|
{
|
||||||
|
MemoryPoolBlock block0 = null;
|
||||||
|
MemoryPoolBlock block1 = null;
|
||||||
|
MemoryPoolBlock block2 = null;
|
||||||
|
MemoryPoolBlock emptyBlock0 = null;
|
||||||
|
MemoryPoolBlock emptyBlock1 = null;
|
||||||
|
|
||||||
|
var byteRange = Enumerable.Range(1, 127).Select(x => (byte)x).ToArray();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
block0 = _pool.Lease();
|
||||||
|
block1 = _pool.Lease();
|
||||||
|
block2 = _pool.Lease();
|
||||||
|
emptyBlock0 = _pool.Lease();
|
||||||
|
emptyBlock1 = _pool.Lease();
|
||||||
|
|
||||||
|
block0.GetIterator().CopyFrom(byteRange);
|
||||||
|
block1.GetIterator().CopyFrom(byteRange);
|
||||||
|
block2.GetIterator().CopyFrom(byteRange);
|
||||||
|
|
||||||
|
var begin = block0.GetIterator();
|
||||||
|
|
||||||
|
// Single block
|
||||||
|
for (var i = 0; i < byteRange.Length; i++)
|
||||||
|
{
|
||||||
|
var t = begin.Take();
|
||||||
|
var b = byteRange[i];
|
||||||
|
|
||||||
|
Assert.Equal(t, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(begin.Take(), -1);
|
||||||
|
|
||||||
|
// Dual block
|
||||||
|
block0.Next = block1;
|
||||||
|
begin = block0.GetIterator();
|
||||||
|
|
||||||
|
for (var block = 0; block < 2; block++)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < byteRange.Length; i++)
|
||||||
|
{
|
||||||
|
var t = begin.Take();
|
||||||
|
var b = byteRange[i];
|
||||||
|
|
||||||
|
Assert.Equal(t, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(begin.Take(), -1);
|
||||||
|
|
||||||
|
// Multi block
|
||||||
|
block1.Next = emptyBlock0;
|
||||||
|
emptyBlock0.Next = emptyBlock1;
|
||||||
|
emptyBlock1.Next = block2;
|
||||||
|
begin = block0.GetIterator();
|
||||||
|
|
||||||
|
for (var block = 0; block < 3; block++)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < byteRange.Length; i++)
|
||||||
|
{
|
||||||
|
var t = begin.Take();
|
||||||
|
var b = byteRange[i];
|
||||||
|
|
||||||
|
Assert.Equal(t, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(begin.Take(), -1);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (block0 != null) _pool.Return(block0);
|
||||||
|
if (block1 != null) _pool.Return(block1);
|
||||||
|
if (block2 != null) _pool.Return(block2);
|
||||||
|
if (emptyBlock0 != null) _pool.Return(emptyBlock0);
|
||||||
|
if (emptyBlock1 != null) _pool.Return(emptyBlock1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestTakeEmptyBlocks()
|
||||||
|
{
|
||||||
|
MemoryPoolBlock emptyBlock0 = null;
|
||||||
|
MemoryPoolBlock emptyBlock1 = null;
|
||||||
|
MemoryPoolBlock emptyBlock2 = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
emptyBlock0 = _pool.Lease();
|
||||||
|
emptyBlock1 = _pool.Lease();
|
||||||
|
emptyBlock2 = _pool.Lease();
|
||||||
|
|
||||||
|
var beginEmpty = emptyBlock0.GetIterator();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
|
||||||
|
// No blocks
|
||||||
|
Assert.Equal(default(MemoryPoolIterator).Take(), -1);
|
||||||
|
|
||||||
|
// Single empty block
|
||||||
|
Assert.Equal(beginEmpty.Take(), -1);
|
||||||
|
|
||||||
|
// Dual empty block
|
||||||
|
emptyBlock0.Next = emptyBlock1;
|
||||||
|
beginEmpty = emptyBlock0.GetIterator();
|
||||||
|
Assert.Equal(beginEmpty.Take(), -1);
|
||||||
|
|
||||||
|
// Multi empty block
|
||||||
|
emptyBlock1.Next = emptyBlock2;
|
||||||
|
beginEmpty = emptyBlock0.GetIterator();
|
||||||
|
Assert.Equal(beginEmpty.Take(), -1);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (emptyBlock0 != null) _pool.Return(emptyBlock0);
|
||||||
|
if (emptyBlock1 != null) _pool.Return(emptyBlock1);
|
||||||
|
if (emptyBlock2 != null) _pool.Return(emptyBlock2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("a", "a", 1)]
|
[InlineData("a", "a", 1)]
|
||||||
[InlineData("ab", "a...", 1)]
|
[InlineData("ab", "a...", 1)]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue