Пример #1
0
 public WaitPoolTest()
 {
     MockInnerPool.Setup(inner => inner.Count).Returns(4);
     MockInnerPool.Setup(inner => inner.Size).Returns(4);
     m_waitPool    = new WaitPool <string>(MockInnerPool.Object, 0);
     DecoratedPool = m_waitPool;
 }
Пример #2
0
 public IdleTimeoutPoolTest()
 {
     MockInnerPool.Setup(inner => inner.Size).Returns(2);
     IdleTimeoutPool = new IdleTimeoutPool2(MockInnerPool.Object,
                                            new Action <PoolItem>(item => m_releaseFactoryCalls++));
     DecoratedPool = IdleTimeoutPool;
 }
Пример #3
0
        public void RecycleIdled()
        {
            // Arrange
            var current = DateTime.UtcNow;

            Assert.False(IdleTimeoutPool.TryIdleOut(new PoolItem("x"), current.AddSeconds(-10)));
            Assert.False(IdleTimeoutPool.TryIdleOut("y", current.AddSeconds(-9)));
            Assert.False(IdleTimeoutPool.TryIdleOut("z", current.AddSeconds(-9)));
            Assert.False(IdleTimeoutPool.TryIdleOut("_", current.AddSeconds(-10)));

            var taken = new Queue <string>(new string[] { "x", "y", "z", "_", null });

            MockInnerPool.Setup(inner => inner.Count).Returns(4);
            MockInnerPool.Setup(inner => inner.Take(null)).Returns(() => taken.Dequeue());

            MockInnerPool.Setup(inner => inner.Return(It.IsAny <string>()))
            .Callback((string item) => taken.Enqueue(item))
            .Returns(() => true);

            // Act
            lock (MockInnerPool.Object)
            {
                Assert.Equal(2, IdleTimeoutPool.RecycleIdled(current));
            }

            // Assert
            Assert.Equal(2, m_releaseFactoryCalls);
            Assert.Equal("z", IdleTimeoutPool.TakeCurrent(null, current));
            Assert.Equal("y", IdleTimeoutPool.TakeCurrent(null, current));
        }
Пример #4
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         MockInnerPool.VerifyAll();
         MockDecoratedPool.VerifyAll();
     }
 }
Пример #5
0
        public EagerPoolTest()
        {
            var calls = 0;

            MockInnerPool.Setup(inner => inner.Size).Returns(2);
            MockInnerPool.Setup(inner => inner.Return("x")).Callback(() => calls++).Returns(true);
            DecoratedPool = new EagerPool <string>(MockInnerPool.Object, CreateFactory, ReleaseFactory);
            Assert.Equal(2, calls);
        }
Пример #6
0
        public void Take_Inner_Returned_Null()
        {
            // Arrange
            MockInnerPool.Setup(inner => inner.Take(null)).Returns((string)null);

            // Act
            var result = DecoratedPool.Take(null);

            // Assert
            Assert.Null(result);
        }
Пример #7
0
        public virtual void Take()
        {
            // Arrange
            MockInnerPool.Setup(inner => inner.Take("state")).Returns("data");

            // Act
            var result = DecoratedPool.Take("state");

            // Assert
            Assert.Equal("data", result);
        }
Пример #8
0
        public void Return_Inner_Return_False()
        {
            // Arrange
            var item = RandomHelper.NextWord(g_random);

            MockInnerPool.Setup(inner => inner.Return(item)).Returns(false);

            // Act
            var result = DecoratedPool.Return(item);

            // Assert
            Assert.False(result);
        }
Пример #9
0
        public virtual void Clear()
        {
            // Arrange
            var succeed = RandomHelper.NextBoolean(g_random);

            MockInnerPool.Setup(inner => inner.Clear()).Returns(succeed);

            // Act
            var result = DecoratedPool.Clear();

            // Assert
            Assert.Equal(succeed, result);
        }
Пример #10
0
        public void Count()
        {
            // Arrange
            var expected = g_random.Next();

            MockInnerPool.Setup(inner => inner.Count).Returns(expected);

            // Act
            var result = DecoratedPool.Count;

            // Assert
            Assert.Equal(expected, result);
        }
Пример #11
0
        public override void Take()
        {
            // Arrange
            MockInnerPool.Setup(inner => inner.Return("x")).Returns(true);
            MockInnerPool.Setup(inner => inner.Take(null)).Returns("x");
            m_waitPool.Return("x");

            // Act
            var result = m_waitPool.Take(null);

            // Assert
            Assert.Equal("x", result);
        }
Пример #12
0
        public virtual void Return_Already_Disposed()
        {
            // Arrange
            MockInnerPool.Setup(inner => inner.Dispose());
            MockManagedPool.Setup(managed => managed.Clear()).Returns(true);
            DecoratedPool.Dispose();

            // Act
            var result = DecoratedPool.Return(null);

            // Assert
            Assert.False(result);
        }
Пример #13
0
        public override void Return_Already_Disposed()
        {
            // Arrange
            MockInnerPool.Setup(inner => inner.Take(null)).Returns((string)null);
            MockInnerPool.Setup(inner => inner.Count).Returns(0);
            MockInnerPool.Setup(inner => inner.Dispose());
            DecoratedPool.Dispose();

            // Act
            var result = DecoratedPool.Return(null);

            // Assert
            Assert.False(result);
        }
Пример #14
0
        public void TakeCurrent_Not_IdledOut()
        {
            // Arrange
            var current = DateTime.UtcNow;

            Assert.False(IdleTimeoutPool.TryIdleOut("x", current.AddSeconds(-1)));
            MockInnerPool.Setup(inner => inner.Take(null)).Returns("x");

            // Act
            var result = IdleTimeoutPool.TakeCurrent(null, current);

            // Assert
            Assert.Equal("x", result);
            Assert.Equal(0, m_releaseFactoryCalls);
        }
Пример #15
0
        public override void Return_Already_Disposed()
        {
            // Arrange
            var items = new Queue <string>(new string[] { "x", "x", null });

            MockInnerPool.Setup(inner => inner.Take(null)).Returns(items.Dequeue);
            MockInnerPool.Setup(inner => inner.Count).Returns(0);
            MockInnerPool.Setup(inner => inner.Dispose());
            DecoratedPool.Dispose();

            // Act
            var result = DecoratedPool.Return(null);

            // Assert
            Assert.False(result);
        }
Пример #16
0
        public void Clear_Inner_Take_Until_Returns_Null()
        {
            // Arrange
            var items = new Queue <string>(new string[] { "x", "y", null });

            MockInnerPool.Setup(inner => inner.Take(null)).Returns(() => items.Dequeue());
            MockInnerPool.Setup(inner => inner.Count).Returns(0);
            var decoratedPool = new Mock <ManagedPool <string> >(MockInnerPool.Object, new Action <string>(ReleaseFactory));

            decoratedPool.CallBase = true;

            // Act
            var result = decoratedPool.Object.Clear();

            // Assert
            Assert.True(result);
            Assert.Equal(0, items.Count);
        }
Пример #17
0
        public void TakeCurrent_IdledOut()
        {
            // Arrange
            var current = DateTime.UtcNow;

            Assert.False(IdleTimeoutPool.TryIdleOut("x", current.AddSeconds(-10)));
            Assert.False(IdleTimeoutPool.TryIdleOut("y", current.AddSeconds(-10)));
            var items = new Queue <string>(new string[] { "x", "y", null });

            MockInnerPool.Setup(inner => inner.Take(null)).Returns(() => items.Dequeue());

            // Act
            var result = IdleTimeoutPool.TakeCurrent(null, current);

            // Assert
            Assert.Null(result);
            Assert.Equal(2, m_releaseFactoryCalls);
        }
Пример #18
0
        public void Take_Inner_Take_Returns_Null()
        {
            // Arrange
            int attempt = 0;

            MockInnerPool.Setup(inner => inner.Return("x")).Returns(true);
            MockInnerPool.Setup(inner => inner.Take(null)).Returns(() => attempt++ == 0 ? (string)null : "x");
            while (m_waitPool.Return("x"))
            {
            }

            // Act
            var result = m_waitPool.Take(null);

            // Assert
            Assert.Null(result);
            for (int i = 0; i < m_waitPool.Size; i++)
            {
                Assert.Equal("x", m_waitPool.Take(null));
            }

            Assert.Null(m_waitPool.Take(null));
        }