Пример #1
0
            public void ShouldReleaseAll()
            {
                var mock = new Mock <IPooledSession>();

                mock.Setup(x => x.IsHealthy).Returns(true);
                var id            = Guid.NewGuid();
                var inUseSessions = new Dictionary <Guid, IPooledSession>();

                inUseSessions.Add(id, mock.Object);

                var sessions = new Queue <IPooledSession>();
                var mock1    = new Mock <IPooledSession>();

                mock1.Setup(x => x.IsHealthy).Returns(true);

                sessions.Enqueue(mock1.Object);

                var pool = new SessionPool(sessions, inUseSessions);

                pool.NumberOfAvailableSessions.Should().Be(1);
                pool.NumberOfInUseSessions.Should().Be(1);

                pool.Dispose();

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);
            }
Пример #2
0
            public void ShouldLogInUseAndAvailableSessionIds()
            {
                var mockLogger = new Mock <ILogger>();
                var mock       = new Mock <IPooledSession>();

                mock.Setup(x => x.IsHealthy).Returns(true);
                var id            = Guid.NewGuid();
                var inUseSessions = new Dictionary <Guid, IPooledSession>();

                inUseSessions.Add(id, mock.Object);

                var sessions = new Queue <IPooledSession>();
                var mock1    = new Mock <IPooledSession>();

                mock1.Setup(x => x.IsHealthy).Returns(true);

                sessions.Enqueue(mock1.Object);

                var pool = new SessionPool(sessions, inUseSessions, logger: mockLogger.Object);

                pool.Dispose();

                mockLogger.Verify(x => x.Info(It.Is <string>(actual => actual.StartsWith("Disposing In Use"))),
                                  Times.Once);
                mockLogger.Verify(x => x.Info(It.Is <string>(actual => actual.StartsWith("Disposing Available"))),
                                  Times.Once);
            }
Пример #3
0
            public void ShouldCloseSessionGotFromAvailableIfPoolDisposeStarted()
            {
                var sessions    = new Queue <IPooledSession>();
                var healthyMock = new Mock <IPooledSession>();

                healthyMock.Setup(x => x.IsHealthy).Returns(true);

                var pool = new SessionPool(sessions, null);

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);

                // this is to simulate we call GetSession after available.clear in pool.Dispose()
                pool.Dispose();
                sessions.Enqueue(healthyMock.Object);
                pool.NumberOfAvailableSessions.Should().Be(1);
                var exception = Record.Exception(() => pool.GetSession());

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);
                healthyMock.Verify(x => x.Reset(), Times.Once);
                healthyMock.Verify(x => x.Close(), Times.Once);
                exception.Should().BeOfType <InvalidOperationException>();
                exception.Message.Should().Contain("the SessionPool is already started to dispose");
            }
Пример #4
0
 public void Dispose()
 {
     if (null != sessionPool)
     {
         sessionPool.Dispose();
         sessionPool = null;
     }
 }
Пример #5
0
        protected virtual void Dispose(bool isDisposing)
        {
            if (!isDisposing)
            {
                return;
            }

            if (_sessionPool != null)
            {
                _sessionPool.Dispose();
                _sessionPool = null;
            }
        }
Пример #6
0
            public void ShouldCloseNewSessionIfPoolDisposeStarted()
            {
                var mock = new Mock <IConnection>();
                var pool = new SessionPool(TestUri, AuthTokens.None, null, Config.DefaultConfig, mock.Object);

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);

                // this is to simulate we call GetSession after available.clear in pool.Dispose()
                pool.Dispose();
                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);
                var exception = Record.Exception(() => pool.GetSession());

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);
                exception.Should().BeOfType <InvalidOperationException>();
                exception.Message.Should().Contain("the SessionPool is already started to dispose");
            }
        public void Dispose_DisposeSessionPool_DestroyAllSessions()
        {
            var mockCreator  = new Mock <Func <Session> >();
            var mockSession1 = new Mock <Session>(null, null, null, null, null);
            var mockSession2 = new Mock <Session>(null, null, null, null, null);

            mockCreator.SetupSequence(x => x()).Returns(mockSession1.Object).Returns(mockSession2.Object);

            var pool = new SessionPool(mockCreator.Object, QldbDriverBuilder.CreateDefaultRetryHandler(NullLogger.Instance), 2, NullLogger.Instance);

            var session1 = pool.GetSession();
            var session2 = pool.GetSession();

            session1.Release();
            session2.Release();

            pool.Dispose();

            mockSession1.Verify(s => s.End(), Times.Exactly(1));
            mockSession2.Verify(s => s.End(), Times.Exactly(1));
        }
Пример #8
0
            public void ShouldCloseTheSessionIfPoolDisposeStarted()
            {
                var mock = new Mock <IPooledSession>();

                mock.Setup(x => x.IsHealthy).Returns(true);
                var id = new Guid();

                var inUseSessions = new Dictionary <Guid, IPooledSession>();

                var pool = new SessionPool(null, inUseSessions);

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);

                pool.Dispose();
                inUseSessions.Add(id, mock.Object);
                pool.NumberOfInUseSessions.Should().Be(1);
                pool.Release(id);

                pool.NumberOfAvailableSessions.Should().Be(0);
                pool.NumberOfInUseSessions.Should().Be(0);
                mock.Verify(x => x.Close(), Times.Once);
            }
Пример #9
0
 public void Dispose()
 {
     pool.Dispose();
 }