public void TestBorrow_BlockUntilAvailable_Exceeds_Timeout() { const int maximum = 1; using ( var target = new StandardObjectPool<PooledObject>( () => new PooledObject(), new ObjectPoolConfiguration() { BorrowTimeout = TimeSpan.FromTicks( 1 ), EvitionInterval = null, ExhausionPolicy = ExhausionPolicy.BlockUntilAvailable, MaximumPooled = maximum, MinimumReserved = 1 } ) ) { var result = new List<PooledObject>(); try { for ( int i = 0; i < maximum + 1; i++ ) { result.Add( target.Borrow() ); } } finally { result.DisposeAll(); } } }
public void TestBorrow_CanUpToMaximum() { const int maximum = 3; using ( var target = new StandardObjectPool<PooledObject>( () => new PooledObject(), new ObjectPoolConfiguration() { BorrowTimeout = TimeSpan.FromSeconds( 3 ), EvitionInterval = null, ExhausionPolicy = ExhausionPolicy.ThrowException, MaximumPooled = maximum, MinimumReserved = 1 } ) ) { var result = new List<PooledObject>(); try { for ( int i = 0; i < maximum; i++ ) { result.Add( target.Borrow() ); } } finally { result.DisposeAll(); } } }
public void TestEviction_Timer_ReducedAtLeast() { const int maximum = 2; using ( var target = new StandardObjectPool<PooledObject>( () => new PooledObject(), new ObjectPoolConfiguration() { Name = "Pool", BorrowTimeout = null, EvitionInterval = TimeSpan.FromMilliseconds( 500 ), ExhausionPolicy = ExhausionPolicy.ThrowException, MaximumPooled = maximum, MinimumReserved = 1 } ) ) { var items = new List<PooledObject>(); try { for ( int i = 0; i < maximum; i++ ) { items.Add( target.Borrow() ); } foreach ( var item in items ) { target.Return( item ); } Assert.That( target.LeasedCount, Is.EqualTo( maximum ) ); Thread.Sleep( TimeSpan.FromMilliseconds( 1000 ) ); Assert.That( target.LeasedCount, Is.LessThan( maximum ) ); } finally { items.DisposeAll(); } } }
public void TestEviction_MinimumIsNotZero_PooledIsZero_Refilled() { const int minimum = 1; const int maximum = 2; using ( var target = new StandardObjectPool<PooledObject>( () => new PooledObject(), new ObjectPoolConfiguration() { BorrowTimeout = null, EvitionInterval = TimeSpan.FromMilliseconds( 500 ), ExhausionPolicy = ExhausionPolicy.ThrowException, MaximumPooled = maximum, MinimumReserved = minimum } ) ) { var items = new List<PooledObject>(); try { for ( int i = 0; i < maximum; i++ ) { items.Add( target.Borrow() ); } Assert.That( target.PooledCount, Is.EqualTo( 0 ) ); target.EvictExtraItems(); Assert.That( target.PooledCount, Is.EqualTo( 0 ) ); } finally { items.DisposeAll(); } } }
public void TestEviction_Induced_ReducedToHalf() { const int maximum = 8; using ( var target = new StandardObjectPool<PooledObject>( () => new PooledObject(), new ObjectPoolConfiguration() { Name = "Pool", BorrowTimeout = null, EvitionInterval = TimeSpan.FromHours( 1 ), ExhausionPolicy = ExhausionPolicy.ThrowException, MaximumPooled = maximum, MinimumReserved = 1 } ) ) { var items = new List<PooledObject>(); try { for ( int i = 0; i < maximum; i++ ) { items.Add( target.Borrow() ); } foreach ( var item in items ) { target.Return( item ); } Assert.That( target.LeasedCount, Is.EqualTo( maximum ) ); target.EvictExtraItems(); Assert.That( target.LeasedCount, Is.EqualTo( maximum / 2 ) ); target.EvictExtraItems(); Assert.That( target.LeasedCount, Is.EqualTo( maximum / 4 ) ); target.EvictExtraItems(); Assert.That( target.LeasedCount, Is.EqualTo( maximum / 8 ) ); target.EvictExtraItems(); Assert.That( target.LeasedCount, Is.EqualTo( maximum / 8 ) ); } finally { items.DisposeAll(); } } }