Пример #1
0
        public void PoolSizeTest()
        {
            int defaultPoolSize = ObjectPool <Type1> .DEFAULT_POOL_SIZE;

            Assert.AreEqual(defaultPoolSize, _type1Pool.PoolSize);
            Type1 acquiredObject = _type1Pool.AcquireObject();

            Assert.AreEqual(defaultPoolSize - 1, _type1Pool.PoolSize);
            _type1Pool.ReleaseObject(acquiredObject);
            Assert.AreEqual(defaultPoolSize, _type1Pool.PoolSize);
        }
Пример #2
0
        public void Test_If_Pool_Removes_Faulted_Items_During_Acquire()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10,
                false,
                TimeSpan.FromSeconds(1));

            var          exceptionThrown = false;
            const string errorMessage    = "Something bad happened...";

            void ThrowEx(PoolItem item)
            {
                exceptionThrown = true;
                op.OnAcquiring.Unsubscribe(ThrowEx);
                throw new Exception(errorMessage);
            }

            op.OnAcquiring.Subscribe(ThrowEx);
            var obj = op.AcquireObject();

            Assert.IsNotNull(obj);
            Assert.IsTrue(exceptionThrown);
        }
Пример #3
0
        public void TestNoAvailableItem()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10);

            op.AcquireAllObjects();

            Assert.AreEqual(0, op.AvailableTokenCount);

            op.AcquireObject();
        }
Пример #4
0
        public void TestAcquireOneAndRelease()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10);

            var o = op.AcquireObject();

            Assert.AreEqual(99, op.AvailableTokenCount);

            Thread.Sleep(new Random().Next(10, 200));
            op.ReleaseObject(o);

            Assert.AreEqual(100, op.AvailableTokenCount);
        }
Пример #5
0
        public void TestObjectInitialization()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10);

            var o = op.AcquireObject();

            Assert.IsNotNull(o);
            Assert.AreEqual(42, o.Number);
            Assert.AreEqual("The Hitchhiker's Guide to the Galaxy", o.Text);

            Thread.Sleep(new Random().Next(10, 200));

            op.ReleaseObject(o);
        }
Пример #6
0
        public void ReleaseObjectOverAgeLimit()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10,
                false,
                TimeSpan.FromSeconds(1));

            Assert.AreEqual(100, op.AvailableTokenCount);

            var o = op.AcquireObject();

            Thread.Sleep(1200);

            Assert.AreEqual(99, op.AvailableTokenCount);

            op.ReleaseObject(o);

            Assert.AreEqual(100, op.AvailableTokenCount);
        }
Пример #7
0
        public void AcquireObjectWithinAgeLimit()
        {
            var op = new ObjectPool <PoolItem>(
                () => new PoolItem(42, "The Hitchhiker's Guide to the Galaxy"),
                100,
                10,
                false,
                TimeSpan.FromHours(8));

            Assert.AreEqual(100, op.AvailableTokenCount);

            Thread.Sleep(1200);
            var o = op.AcquireObject();

            Assert.AreEqual(99, op.AvailableTokenCount);
            Assert.IsTrue(o.CreationTime < DateTime.UtcNow - TimeSpan.FromSeconds(1));

            op.ReleaseObject(o);

            Assert.AreEqual(100, op.AvailableTokenCount);
        }