Example #1
0
        public void SetUp()
        {
            Retries = 0;

            // log messages so we can see what is going on
            RetryStrategy           = new MyRetryStrategy();
            RetryStrategy.Retrying += (sender, re) => { Retries++; };

            // by default only retry once or tests will take long
            RetryStrategy.MaxRetryCount = 1;
            RetryStrategy.MaxBackOff    = new TimeSpan(0, 0, 0, 0, 10);
        }
            public void RetryWithTableParameterShouldSendRecords()
            {
                var retryStrategy = new MyRetryStrategy();

                retryStrategy.MaxRetryCount = 1;
                retryStrategy.MaxBackOff    = new TimeSpan(0, 0, 0, 0, 1);

                try
                {
                    Connection().ExecuteSql("CREATE TYPE TestTable AS TABLE (value int)");

                    using (var connection = Connection())
                    {
                        var reliable = new ReliableConnection((DbConnection)connection, retryStrategy);

                        reliable.ExecuteSql("CREATE TABLE TestTableFlag (id int)");
                        reliable.ExecuteSql(@"
							CREATE PROC ProcWithTestTable (@table TestTable READONLY) AS 
								IF NOT EXISTS (SELECT * FROM TestTableFlag)
								BEGIN
									INSERT INTO TestTableFlag VALUES (1);
									RAISERROR ('Force a Retry', 16, 1);
								END
								ELSE
									SELECT COUNT(*) FROM @table;
						"                        );

                        var list = new List <TestData>()
                        {
                            new TestData()
                            {
                                i = 1
                            }
                        };
                        var count = reliable.ExecuteScalar <int>("ProcWithTestTable", new { table = list });

                        Assert.AreEqual(list.Count, count);
                    }
                }
                finally
                {
                    Connection().ExecuteSql("DROP PROC ProcWithTestTable");
                    Connection().ExecuteSql("DROP TABLE TestTableFlag");
                    Connection().ExecuteSql("DROP TYPE TestTable");
                }
            }