public void ShouldCloseInnerConnection()
        {
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            connectionWrapper.Close();
            dbConnectionMock.Verify(x => x.Close());
        }
        public void ShouldSetConnectionStringToInnerConnection()
        {
            string testConnectionString          = fixture.Create <string>();
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            connectionWrapper.ConnectionString = testConnectionString;
            dbConnectionMock.VerifySet(x => x.ConnectionString = testConnectionString);
        }
        public void ShouldCloseAndDisposeInnerConnection()
        {
            var dbConnectionMock = new MockDbConnection();
            Mock <ISyncPolicy> retryPolicyMock = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock, retryPolicyMock.Object);

            connectionWrapper.Dispose();
            Assert.Equal(1, ((MockDbConnection)connectionWrapper.InnerConnection).CloseCount);
            Assert.Equal(1, ((MockDbConnection)connectionWrapper.InnerConnection).DisposeCount);
        }
        public void ShouldSetNewDatabaseToInnerConnection()
        {
            string testDatabasename = fixture.Create <string>();
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            connectionWrapper.ChangeDatabase(testDatabasename);
            dbConnectionMock.Verify(x => x.ChangeDatabase(testDatabasename));
        }
        public void ShouldReadConnectionStateFromInnerConnection()
        {
            ConnectionState     testConnectionState = fixture.Create <ConnectionState>();
            Mock <DbConnection> dbConnectionMock    = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock     = new Mock <ISyncPolicy>();

            dbConnectionMock.Setup(x => x.State).Returns(testConnectionState);
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            Assert.Equal(testConnectionState, connectionWrapper.State);
        }
        public void ShouldReadServerVersionFromInnerConnection()
        {
            string testServerVersion             = fixture.Create <string>();
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();

            dbConnectionMock.Setup(x => x.ServerVersion).Returns(testServerVersion);
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            Assert.Equal(testServerVersion, connectionWrapper.ServerVersion);
        }
        public void ShouldReadDataSourceFromInnerConnection()
        {
            string testDataSource = fixture.Create <string>();
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();

            dbConnectionMock.Setup(x => x.DataSource).Returns(testDataSource);
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            Assert.Equal(testDataSource, connectionWrapper.DataSource);
        }
        public void ShouldCreateCommandsInInnerConnectionAnReturnWrapper()
        {
            var dbConnectionMock = new MockDbConnection();
            Mock <ISyncPolicy> retryPolicyMock = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock, retryPolicyMock.Object);

            var obtainedCommand = connectionWrapper.CreateCommand();

            Assert.Equal(1, ((MockDbConnection)connectionWrapper.InnerConnection).CreateCommandCount);
            Assert.True(obtainedCommand is ReliableDbCommandWrapper);
        }
        public void ShouldNotOpenInnerConnectionWhenAlreadyOpen()
        {
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            dbConnectionMock.Setup(x => x.State).Returns(ConnectionState.Open);

            connectionWrapper.Open();
            dbConnectionMock.Verify(x => x.Open(), Times.Never);
        }
예제 #10
0
        public void ShouldReturnConnectionGivenOnConstruction()
        {
            Mock <DbConnection>         dbConnectionMock  = new Mock <DbConnection>();
            Mock <DbTransaction>        dbTransactionMock = new Mock <DbTransaction>();
            Mock <ISyncPolicy>          retryPolicyMock   = new Mock <ISyncPolicy>();
            ReliableDbConnectionWrapper connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            var transactionWrapper = new ReliableDbTransactionWrapper(dbTransactionMock.Object, connectionWrapper, retryPolicyMock.Object);

            Assert.Equal(connectionWrapper, transactionWrapper.Connection);
        }
예제 #11
0
        public void ShouldDisposeInnerTransaction()
        {
            Mock <DbConnection>         dbConnectionMock  = new Mock <DbConnection>();
            MockDbTransaction           dbTransactionMock = new MockDbTransaction();
            Mock <ISyncPolicy>          retryPolicyMock   = new Mock <ISyncPolicy>();
            ReliableDbConnectionWrapper connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            var transactionWrapper = new ReliableDbTransactionWrapper(dbTransactionMock, connectionWrapper, retryPolicyMock.Object);

            transactionWrapper.Dispose();
            Assert.Equal(1, dbTransactionMock.DisposalCount);
        }
        public void ShouldOpenInnerConnectionWithRetriesWhenInStatusOtherThanOpen()
        {
            Mock <DbConnection> dbConnectionMock = new Mock <DbConnection>();
            Mock <ISyncPolicy>  retryPolicyMock  = new Mock <ISyncPolicy>();
            var connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            dbConnectionMock.Setup(x => x.State).Returns(ConnectionState.Closed);
            retryPolicyMock.Setup(x => x.Execute(It.IsAny <Action>())).Callback <Action>(a => a.Invoke());

            connectionWrapper.Open();
            retryPolicyMock.Verify(x => x.Execute(It.IsAny <Action>()));
            dbConnectionMock.Verify(x => x.Open());
        }
        public void ShouldBeginTransactionInInnerConnectionAnReturnWrapper()
        {
            var testIsolationLevel             = IsolationLevel.ReadCommitted;
            var dbConnectionMock               = new MockDbConnection();
            Mock <ISyncPolicy> retryPolicyMock = new Mock <ISyncPolicy>();
            var connectionWrapper              = new ReliableDbConnectionWrapper(dbConnectionMock, retryPolicyMock.Object);

            var obtainedTransaction = connectionWrapper.BeginTransaction(testIsolationLevel);

            Assert.Equal(1, ((MockDbConnection)connectionWrapper.InnerConnection).BeginDbTransactionCount);
            Assert.Equal(testIsolationLevel, ((MockDbConnection)dbConnectionMock).LastUsedTransactionIsolationLevel);
            Assert.True(obtainedTransaction is ReliableDbTransactionWrapper);
            Assert.True(((ReliableDbTransactionWrapper)obtainedTransaction).InnerTransaction is MockDbTransaction);
        }
예제 #14
0
        public void ShouldTakeIsolationLevelFromInnerTransaction()
        {
            IsolationLevel              testIsolationLevel = IsolationLevel.ReadCommitted;
            Mock <DbConnection>         dbConnectionMock   = new Mock <DbConnection>();
            Mock <DbTransaction>        dbTransactionMock  = new Mock <DbTransaction>();
            Mock <ISyncPolicy>          retryPolicyMock    = new Mock <ISyncPolicy>();
            ReliableDbConnectionWrapper connectionWrapper  = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            dbTransactionMock.Setup(x => x.IsolationLevel).Returns(testIsolationLevel);

            var transactionWrapper = new ReliableDbTransactionWrapper(dbTransactionMock.Object, connectionWrapper, retryPolicyMock.Object);

            Assert.Equal(testIsolationLevel, transactionWrapper.IsolationLevel);
        }
예제 #15
0
        public void ShouldRollBackWithRetriesInInnerTransaction()
        {
            Mock <DbConnection>         dbConnectionMock  = new Mock <DbConnection>();
            Mock <DbTransaction>        dbTransactionMock = new Mock <DbTransaction>();
            Mock <ISyncPolicy>          retryPolicyMock   = new Mock <ISyncPolicy>();
            ReliableDbConnectionWrapper connectionWrapper = new ReliableDbConnectionWrapper(dbConnectionMock.Object, retryPolicyMock.Object);

            var transactionWrapper = new ReliableDbTransactionWrapper(dbTransactionMock.Object, connectionWrapper, retryPolicyMock.Object);

            retryPolicyMock.Setup(x => x.Execute(It.IsAny <Action>())).Callback <Action>(a => a.Invoke());

            transactionWrapper.Rollback();
            retryPolicyMock.Verify(x => x.Execute(It.IsAny <Action>()));
            dbTransactionMock.Verify(x => x.Rollback());
        }