Beispiel #1
0
        /// <summary>
        /// Tests the insert does not execute twice on not null violation base.
        /// </summary>
        /// <param name="testContext">The test context.</param>
        public void Test_InsertDoesNotExecuteTwiceOnNotNullViolationBase(TestContext testContext)
        {
            var initArgs = new TestArguments
            {
                Query            = TestUtils.LoadSqlResource("RunStackOverflow33271446"),
                ConnectionString =
                    new[]
                {
                    $"{this.SqlServerInstanceInfo.GetServerConnection()};Database={TestUtils.DatabaseName};Application Name={testContext.TestName}"
                },
                QueryTimeout    = 1,
                AbortOnErrorSet = true
            };

            using (var impl = new SqlExecuteImpl(initArgs))
            {
                try
                {
                    impl.Execute();
                }
                catch (SqlException e)
                {
                    Assert.AreEqual(InsertNullInNotNullColumn, e.Number);
                }
            }

            // Now assert only one row was inserted into table 's'
            Debug.WriteLine("Asserting that only one row was inserted");
            Assert.AreEqual(
                1,
                TestUtils.ExecuteScalar <int>(
                    $"{this.SqlServerInstanceInfo.GetServerConnection()};Database={TestUtils.DatabaseName};Application Name=RESULT_{testContext.TestName}",
                    "select count(*) from s"),
                "More than one row inserted/");
        }
Beispiel #2
0
        /// <summary>
        /// Tests the invoke SQLCMD returns error for arithmetic overflow error.
        /// </summary>
        public void Should_RAISERROR_on_arithmetic_overflow(TestContext testContext)
        {
            var initArgs = new TestArguments
            {
                Query            = "SELECT convert(int,100000000000)",
                ConnectionString =
                    new[]
                { $"{this.SqlServerInstanceInfo.GetServerConnection()};Application Name={testContext.TestName}" }
            };

            using (var impl = new SqlExecuteImpl(initArgs))
            {
                try
                {
                    impl.Execute();
                }
                catch (Exception e)
                {
                    if (e.InnerException is SqlException sqlException)
                    {
                        Assert.AreEqual(ArithmeticOverflowError, sqlException.Number);
                    }

                    throw;
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Tests the invoke SQLCMD does not return sp name nor line when error occurs in procedure.
        /// </summary>
        public void Should_report_stored_procedure_details_in_error_raised_within_an_executing_procedure(TestContext testContext)
        {
            var initArgs = new TestArguments
            {
                Query =
                    TestUtils.LoadSqlResource(
                        "InvokeSqlcmdDoesNotReturnSpNameNorLineWhenErrorOccursInProcedure"),
                ConnectionString =
                    new[]
                {
                    $"{this.SqlServerInstanceInfo.GetServerConnection()};Database={TestUtils.DatabaseName};Application Name=1_{testContext.TestName}"
                }
            };

            using (var impl = new SqlExecuteImpl(initArgs))
            {
                // Create error proc
                impl.Execute();
            }

            // ReSharper disable once StringLiteralTypo
            initArgs.Query            = "EXEC dbo.geterror";
            initArgs.ConnectionString =
                new[]
            { $"{this.SqlServerInstanceInfo.GetServerConnection()};Database={TestUtils.DatabaseName};Application Name=2_{testContext.TestName}" };

            using (var impl = new SqlExecuteImpl(initArgs))
            {
                try
                {
                    // Execute error proc
                    impl.Execute();
                }
                catch (Exception e)
                {
                    if (e.InnerException is SqlException sqlException)
                    {
                        // ReSharper disable once StringLiteralTypo
                        Assert.AreEqual("geterror", sqlException.Procedure);
                        return;
                    }

                    throw;
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Tests the invoke SQLCMD does return raised error if query was run in single user mode.
        /// </summary>
        public void Should_correctly_RAISERROR_when_database_set_to_single_user_mode(TestContext testContext)
        {
            var initArgs = new TestArguments
            {
                Query = TestUtils.LoadSqlResource(
                    "InvokeSqlcmdDoesNotReturnRaisedErrorIfQueryWasRunInSingleUserMode"),
                ConnectionString =
                    new[]
                { $"{this.SqlServerInstanceInfo.GetServerConnection()};Application Name={testContext.TestName}" }
            };

            using (var impl = new SqlExecuteImpl(initArgs))
            {
                try
                {
                    impl.Execute();
                }
                catch (SqlException e)
                {
                    Assert.AreEqual("First Error.", e.Message);
                }
            }
        }