/// <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/"); }
/// <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; } } }
/// <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; } } }
/// <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); } } }