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); }
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); }
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"); }
public void Dispose() { if (null != sessionPool) { sessionPool.Dispose(); sessionPool = null; } }
protected virtual void Dispose(bool isDisposing) { if (!isDisposing) { return; } if (_sessionPool != null) { _sessionPool.Dispose(); _sessionPool = null; } }
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)); }
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); }
public void Dispose() { pool.Dispose(); }