public void NoDefaultProvided()
        {
            IDbProvider provider = DbProviderFactory.GetDbProvider("System.Data.SqlClient");

            provider.ConnectionString = "connString1";
            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders             = new Hashtable();

            targetDbProviders.Add("db1", provider);
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();
            try
            {
                Assert.AreEqual("connString1", multiDbProvider.ConnectionString);
                Assert.Fail("InvalidDataAccessApiUsageException should have been thrown");
            }
            catch (InvalidDataAccessApiUsageException exception)
            {
                Assert.AreEqual("No provider name found in thread local storage.  Consider setting the property DefaultDbProvider to fallback to a default value.", exception.Message);
            }
            finally
            {
                LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
            }
        }
        public void CreateOperations()
        {
            IDbProvider   dbProvider     = mocks.StrictMock <IDbProvider>();
            IDbConnection mockConnection = mocks.StrictMock <IDbConnection>();

            Expect.Call(dbProvider.CreateConnection()).Return(mockConnection).Repeat.Once();

            IDbCommand mockCommand = (IDbCommand)mocks.CreateMock(typeof(IDbCommand));

            Expect.Call(dbProvider.CreateCommand()).Return(mockCommand).Repeat.Once();

            IDbDataParameter mockParameter = (IDbDataParameter)mocks.CreateMock(typeof(IDbDataParameter));

            Expect.Call(dbProvider.CreateParameter()).Return(mockParameter).Repeat.Once();

            IDbDataAdapter mockDataAdapter = (IDbDataAdapter)mocks.CreateMock(typeof(IDbDataAdapter));

            Expect.Call(dbProvider.CreateDataAdapter()).Return(mockDataAdapter).Repeat.Once();

            DbCommandBuilder mockDbCommandBuilder = (DbCommandBuilder)mocks.CreateMock(typeof(DbCommandBuilder));

            Expect.Call(dbProvider.CreateCommandBuilder()).Return(mockDbCommandBuilder).Repeat.Once();

            Expect.Call(dbProvider.CreateParameterName("p1")).Return("@p1").Repeat.Once();
            Expect.Call(dbProvider.CreateParameterNameForCollection("c1")).Return("cc1");

            IDbMetadata mockDbMetaData = (IDbMetadata)mocks.CreateMock(typeof(IDbMetadata));

            Expect.Call(dbProvider.DbMetadata).Return(mockDbMetaData);

            Exception e = new Exception("foo");

            Expect.Call(dbProvider.ExtractError(e)).Return("badsql").Repeat.Once();
            DbException dbException = (DbException)mocks.CreateMock(typeof(DbException));


            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders             = new Hashtable();

            targetDbProviders.Add("db1", dbProvider);
            multiDbProvider.DefaultDbProvider = dbProvider;
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();


            mocks.ReplayAll();

            Assert.IsNotNull(multiDbProvider.CreateConnection());
            Assert.IsNotNull(multiDbProvider.CreateCommand());
            Assert.IsNotNull(multiDbProvider.CreateParameter());
            Assert.IsNotNull(multiDbProvider.CreateDataAdapter());
            Assert.IsNotNull(multiDbProvider.CreateCommandBuilder() as DbCommandBuilder);
            Assert.AreEqual("@p1", multiDbProvider.CreateParameterName("p1"));
            Assert.AreEqual("cc1", multiDbProvider.CreateParameterNameForCollection("c1"));
            Assert.IsNotNull(multiDbProvider.DbMetadata);
            Assert.AreEqual("badsql", multiDbProvider.ExtractError(e));
            Assert.IsTrue(multiDbProvider.IsDataAccessException(dbException));
            Assert.IsFalse(multiDbProvider.IsDataAccessException(e));
            mocks.VerifyAll();
        }
        public void NoMatchingProviderDefinedInThreadLocalStorage()
        {
            IDbProvider provider = DbProviderFactory.GetDbProvider("System.Data.SqlClient");

            provider.ConnectionString = "connString1";
            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders             = new Hashtable();

            targetDbProviders.Add("db1", provider);
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();
            try
            {
                MultiDelegatingDbProvider.CurrentDbProviderName = "db2";
                Assert.AreEqual("connString1", multiDbProvider.ConnectionString);
                Assert.Fail("InvalidDataAccessApiUsageException should have been thrown");
            }
            catch (InvalidDataAccessApiUsageException exception)
            {
                Assert.AreEqual("'db2' was not under the thread local key 'dbProviderName' and no default IDbProvider was set.", exception.Message);
            }
            finally
            {
                LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
            }
        }
        public void FallbackToDefault()
        {
            IDbProvider provider1 = DbProviderFactory.GetDbProvider("System.Data.SqlClient");

            provider1.ConnectionString = "connString1";
            IDbProvider provider2 = DbProviderFactory.GetDbProvider("System.Data.SqlClient");

            provider2.ConnectionString = "connString2";
            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders             = new Hashtable();

            targetDbProviders.Add("db1", provider1);
            targetDbProviders.Add("db2", provider2);
            multiDbProvider.DefaultDbProvider = provider1;
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();

            MultiDelegatingDbProvider.CurrentDbProviderName = "db314";
            try
            {
                Assert.AreEqual("connString1", multiDbProvider.ConnectionString);
            }
            finally
            {
                LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
            }
        }
示例#5
0
        public void CreateOperations()
        {
            IDbProvider   dbProvider     = A.Fake <IDbProvider>();
            IDbConnection mockConnection = A.Fake <IDbConnection>();

            A.CallTo(() => dbProvider.CreateConnection()).Returns(mockConnection).Once();

            IDbCommand mockCommand = A.Fake <IDbCommand>();

            A.CallTo(() => dbProvider.CreateCommand()).Returns(mockCommand).Once();

            IDbDataParameter mockParameter = A.Fake <IDbDataParameter>();

            A.CallTo(() => dbProvider.CreateParameter()).Returns(mockParameter).Once();

            IDbDataAdapter mockDataAdapter = A.Fake <IDbDataAdapter>();

            A.CallTo(() => dbProvider.CreateDataAdapter()).Returns(mockDataAdapter).Once();

            DbCommandBuilder mockDbCommandBuilder = A.Fake <DbCommandBuilder>();

            A.CallTo(() => dbProvider.CreateCommandBuilder()).Returns(mockDbCommandBuilder).Once();

            A.CallTo(() => dbProvider.CreateParameterName("p1")).Returns("@p1").Once();
            A.CallTo(() => dbProvider.CreateParameterNameForCollection("c1")).Returns("cc1");

            IDbMetadata mockDbMetaData = A.Fake <IDbMetadata>();

            A.CallTo(() => dbProvider.DbMetadata).Returns(mockDbMetaData);

            Exception e = new Exception("foo");

            A.CallTo(() => dbProvider.ExtractError(e)).Returns("badsql").Once();
            DbException dbException = A.Fake <DbException>();


            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders             = new Hashtable();

            targetDbProviders.Add("db1", dbProvider);
            multiDbProvider.DefaultDbProvider = dbProvider;
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();

            Assert.IsNotNull(multiDbProvider.CreateConnection());
            Assert.IsNotNull(multiDbProvider.CreateCommand());
            Assert.IsNotNull(multiDbProvider.CreateParameter());
            Assert.IsNotNull(multiDbProvider.CreateDataAdapter());
            Assert.IsNotNull(multiDbProvider.CreateCommandBuilder() as DbCommandBuilder);
            Assert.AreEqual("@p1", multiDbProvider.CreateParameterName("p1"));
            Assert.AreEqual("cc1", multiDbProvider.CreateParameterNameForCollection("c1"));
            Assert.IsNotNull(multiDbProvider.DbMetadata);
            Assert.AreEqual("badsql", multiDbProvider.ExtractError(e));
            Assert.IsTrue(multiDbProvider.IsDataAccessException(dbException));
            Assert.IsFalse(multiDbProvider.IsDataAccessException(e));
        }
        public void CreateOperations()
        {
            IDbProvider dbProvider = (IDbProvider)mocks.CreateMock(typeof(IDbProvider));
            IDbConnection mockConnection = (IDbConnection)mocks.CreateMock(typeof(IDbConnection));
            Expect.Call(dbProvider.CreateConnection()).Return(mockConnection).Repeat.Once();

            IDbCommand mockCommand = (IDbCommand)mocks.CreateMock(typeof(IDbCommand));
            Expect.Call(dbProvider.CreateCommand()).Return(mockCommand).Repeat.Once();

            IDbDataParameter mockParameter = (IDbDataParameter) mocks.CreateMock(typeof (IDbDataParameter));
            Expect.Call(dbProvider.CreateParameter()).Return(mockParameter).Repeat.Once();

            IDbDataAdapter mockDataAdapter = (IDbDataAdapter) mocks.CreateMock(typeof (IDbDataAdapter));
            Expect.Call(dbProvider.CreateDataAdapter()).Return(mockDataAdapter).Repeat.Once();

            DbCommandBuilder mockDbCommandBuilder = (DbCommandBuilder) mocks.CreateMock(typeof (DbCommandBuilder));
            Expect.Call(dbProvider.CreateCommandBuilder()).Return(mockDbCommandBuilder).Repeat.Once();

            Expect.Call(dbProvider.CreateParameterName("p1")).Return("@p1").Repeat.Once();
            Expect.Call(dbProvider.CreateParameterNameForCollection("c1")).Return("cc1");

            IDbMetadata mockDbMetaData = (IDbMetadata) mocks.CreateMock(typeof (IDbMetadata));
            Expect.Call(dbProvider.DbMetadata).Return(mockDbMetaData);

            Exception e = new Exception("foo");
            Expect.Call(dbProvider.ExtractError(e)).Return("badsql").Repeat.Once();
            DbException dbException = (DbException) mocks.CreateMock(typeof (DbException));

            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders = new Hashtable();
            targetDbProviders.Add("db1", dbProvider);
            multiDbProvider.DefaultDbProvider = dbProvider;
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();

            mocks.ReplayAll();

            Assert.IsNotNull(multiDbProvider.CreateConnection());
            Assert.IsNotNull(multiDbProvider.CreateCommand());
            Assert.IsNotNull(multiDbProvider.CreateParameter());
            Assert.IsNotNull(multiDbProvider.CreateDataAdapter());
            Assert.IsNotNull(multiDbProvider.CreateCommandBuilder() as DbCommandBuilder);
            Assert.AreEqual("@p1", multiDbProvider.CreateParameterName("p1"));
            Assert.AreEqual("cc1", multiDbProvider.CreateParameterNameForCollection("c1"));
            Assert.IsNotNull(multiDbProvider.DbMetadata);
            Assert.AreEqual("badsql", multiDbProvider.ExtractError(e));
            Assert.IsTrue(multiDbProvider.IsDataAccessException(dbException));
            Assert.IsFalse(multiDbProvider.IsDataAccessException(e));
            mocks.VerifyAll();
        }
 public void CreationWithWrongTypeDictionaryValues()
 {
     try
     {
         IDictionary targetDbProviders = new Hashtable();
         targetDbProviders.Add("foo", 1);
         //Exercise the constructor
         MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider(targetDbProviders);
         dbProvider.AfterPropertiesSet();
         Assert.Fail("Should have thrown ArgumentException");
     }
     catch (ArgumentException ex)
     {
         Assert.AreEqual("Value in TargetDbProviders dictionary is not of type IDbProvider.  Type = [System.Int32]", ex.Message);
     }
 }
 public void CreationWithWrongTypeDictionaryKeys()
 {
     try
     {
         MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider();
         IDictionary targetDbProviders        = new Hashtable();
         targetDbProviders.Add(1, "bar");
         dbProvider.TargetDbProviders = targetDbProviders;
         dbProvider.AfterPropertiesSet();
         Assert.Fail("Should have thrown ArgumentException");
     }
     catch (ArgumentException ex)
     {
         Assert.AreEqual("Key identifying target IDbProvider in TargetDbProviders dictionary property is required to be of type string.  Key = [1], type = [System.Int32]", ex.Message);
     }
 }
 public void CreationWithWrongTypeDictionaryValues()
 {
     try
     {
         IDictionary targetDbProviders = new Hashtable();
         targetDbProviders.Add("foo", 1);
         //Exercise the constructor
         MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider(targetDbProviders);
         dbProvider.AfterPropertiesSet();
         Assert.Fail("Should have thrown ArgumentException");
     }
     catch (ArgumentException ex)
     {
         Assert.AreEqual("Value in TargetDbProviders dictionary is not of type IDbProvider.  Type = [System.Int32]", ex.Message);
     }
 }
 public void CreationWithWrongTypeDictionaryKeys()
 {
     try
     {
         MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider();
         IDictionary targetDbProviders = new Hashtable();
         targetDbProviders.Add(1, "bar");
         dbProvider.TargetDbProviders = targetDbProviders;
         dbProvider.AfterPropertiesSet();
         Assert.Fail("Should have thrown ArgumentException");
     }
     catch (ArgumentException ex)
     {
         Assert.AreEqual("Key identifying target IDbProvider in TargetDbProviders dictionary property is required to be of type string.  Key = [1], type = [System.Int32]", ex.Message);
     }
 }
        public void CreationWhenNoRequiredPropertiesSet()
        {
            MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider();

            dbProvider.AfterPropertiesSet();
        }
 public void NoMatchingProviderDefinedInThreadLocalStorage()
 {
     IDbProvider provider = DbProviderFactory.GetDbProvider("System.Data.SqlClient");
     provider.ConnectionString = "connString1";
     MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
     IDictionary targetDbProviders = new Hashtable();
     targetDbProviders.Add("db1", provider);
     multiDbProvider.TargetDbProviders = targetDbProviders;
     multiDbProvider.AfterPropertiesSet();
     try
     {
         MultiDelegatingDbProvider.CurrentDbProviderName = "db2";
         Assert.AreEqual("connString1", multiDbProvider.ConnectionString);
         Assert.Fail("InvalidDataAccessApiUsageException should have been thrown");
     }
     catch (InvalidDataAccessApiUsageException exception)
     {
         Assert.AreEqual("'db2' was not under the thread local key 'dbProviderName' and no default IDbProvider was set.", exception.Message);
     }
     finally
     {
         LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
     }
 }
 public void NoDefaultProvided()
 {
     IDbProvider provider = DbProviderFactory.GetDbProvider("System.Data.SqlClient");
     provider.ConnectionString = "connString1";
     MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
     IDictionary targetDbProviders = new Hashtable();
     targetDbProviders.Add("db1", provider);
     multiDbProvider.TargetDbProviders = targetDbProviders;
     multiDbProvider.AfterPropertiesSet();
     try
     {
         Assert.AreEqual("connString1", multiDbProvider.ConnectionString);
         Assert.Fail("InvalidDataAccessApiUsageException should have been thrown");
     }
     catch (InvalidDataAccessApiUsageException exception)
     {
         Assert.AreEqual("No provider name found in thread local storage.  Consider setting the property DefaultDbProvider to fallback to a default value.", exception.Message);
     }
     finally
     {
         LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
     }
 }
        public void MatchingProviderDefinedInThreadLocalStorage()
        {
            IDbProvider provider1 = DbProviderFactory.GetDbProvider("System.Data.SqlClient");
            provider1.ConnectionString = "connString1";
            IDbProvider provider2 = DbProviderFactory.GetDbProvider("System.Data.SqlClient");
            provider2.ConnectionString = "connString2";
            MultiDelegatingDbProvider multiDbProvider = new MultiDelegatingDbProvider();
            IDictionary targetDbProviders = new Hashtable();
            targetDbProviders.Add("db1", provider1);
            targetDbProviders.Add("db2", provider2);
            multiDbProvider.DefaultDbProvider = provider1;
            multiDbProvider.TargetDbProviders = targetDbProviders;
            multiDbProvider.AfterPropertiesSet();

            //an aside, set setter for connection string
            multiDbProvider.ConnectionString = "connString1Reset";
            Assert.AreEqual("connString1Reset", multiDbProvider.ConnectionString);

            MultiDelegatingDbProvider.CurrentDbProviderName = "db2";
            try
            {
                Assert.AreEqual("connString2", multiDbProvider.ConnectionString);
            }
            finally
            {
                LogicalThreadContext.FreeNamedDataSlot(MultiDelegatingDbProvider.CURRENT_DBPROVIDER_SLOTNAME);
            }
        }
 public void CreationWhenNoRequiredPropertiesSet()
 {
     MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider();
     dbProvider.AfterPropertiesSet();
 }
示例#16
0
 public void CreationWhenNoRequiredPropertiesSet()
 {
     MultiDelegatingDbProvider dbProvider = new MultiDelegatingDbProvider();
     Assert.Throws<ArgumentException>(() => dbProvider.AfterPropertiesSet());
 }