public void DatabaseExceptionTest3() { MockDbConnection.ClearLog(); var exceptions = new List<Exception>(); var db = new DatabaseTarget(); db.CommandText = "not important"; db.ConnectionString = "cannotexecute"; db.KeepConnection = true; db.DBProvider = typeof(MockDbConnection).AssemblyQualifiedName; db.Initialize(null); db.WriteAsyncLogEvents( LogEventInfo.CreateNullEvent().WithContinuation(exceptions.Add), LogEventInfo.CreateNullEvent().WithContinuation(exceptions.Add), LogEventInfo.CreateNullEvent().WithContinuation(exceptions.Add)); db.Close(); Assert.Equal(3, exceptions.Count); Assert.NotNull(exceptions[0]); Assert.NotNull(exceptions[1]); Assert.NotNull(exceptions[2]); Assert.Equal("Failure during ExecuteNonQuery", exceptions[0].Message); Assert.Equal("Failure during ExecuteNonQuery", exceptions[1].Message); Assert.Equal("Failure during ExecuteNonQuery", exceptions[2].Message); string expectedLog = @"Open('cannotexecute'). ExecuteNonQuery: not important Close() Dispose() Open('cannotexecute'). ExecuteNonQuery: not important Close() Dispose() Open('cannotexecute'). ExecuteNonQuery: not important Close() Dispose() "; AssertLog(expectedLog); }
public void KeepConnectionOpenBatchedTest2() { MockDbConnection.ClearLog(); DatabaseTarget dt = new DatabaseTarget() { CommandText = "INSERT INTO FooBar VALUES('${message}')", ConnectionString = "Database=${logger}", DBProvider = typeof(MockDbConnection).AssemblyQualifiedName, KeepConnection = true, }; dt.Initialize(null); Assert.Same(typeof(MockDbConnection), dt.ConnectionType); // when we pass multiple log events in an array, the target will bucket-sort them by // connection string and group all commands for the same connection string together // to minimize number of db open/close operations // in this case msg1, msg2 and msg4 will be written together to MyLogger database // and msg3 will be written to MyLogger2 database List<Exception> exceptions = new List<Exception>(); var events = new[] { new LogEventInfo(LogLevel.Info, "MyLogger", "msg1").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Info, "MyLogger", "msg2").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Info, "MyLogger2", "msg3").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Info, "MyLogger", "msg4").WithContinuation(exceptions.Add), }; dt.WriteAsyncLogEvents(events); foreach (var ex in exceptions) { Assert.Null(ex); } string expectedLog = @"Open('Database=MyLogger'). ExecuteNonQuery: INSERT INTO FooBar VALUES('msg1') ExecuteNonQuery: INSERT INTO FooBar VALUES('msg2') ExecuteNonQuery: INSERT INTO FooBar VALUES('msg4') Close() Dispose() Open('Database=MyLogger2'). ExecuteNonQuery: INSERT INTO FooBar VALUES('msg3') "; AssertLog(expectedLog); MockDbConnection.ClearLog(); dt.Close(); expectedLog = @"Close() Dispose() "; AssertLog(expectedLog); }
public void ParameterFacetTest() { MockDbConnection.ClearLog(); DatabaseTarget dt = new DatabaseTarget() { CommandText = "INSERT INTO FooBar VALUES(@msg, @lvl, @lg)", DBProvider = typeof(MockDbConnection).AssemblyQualifiedName, KeepConnection = true, Parameters = { new DatabaseParameterInfo("msg", "${message}") { Precision = 3, Scale = 7, Size = 9, }, new DatabaseParameterInfo("lvl", "${level}") { Scale = 7 }, new DatabaseParameterInfo("lg", "${logger}") { Precision = 0 }, } }; dt.Initialize(null); Assert.Same(typeof(MockDbConnection), dt.ConnectionType); // when we pass multiple log events in an array, the target will bucket-sort them by // connection string and group all commands for the same connection string together // to minimize number of db open/close operations // in this case msg1, msg2 and msg4 will be written together to MyLogger database // and msg3 will be written to MyLogger2 database var exceptions = new List<Exception>(); var events = new[] { new LogEventInfo(LogLevel.Info, "MyLogger", "msg1").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Debug, "MyLogger2", "msg3").WithContinuation(exceptions.Add), }; dt.WriteAsyncLogEvents(events); dt.Close(); foreach (var ex in exceptions) { Assert.Null(ex); } string expectedLog = @"Open('Server=.;Trusted_Connection=SSPI;'). CreateParameter(0) Parameter #0 Direction=Input Parameter #0 Name=msg Parameter #0 Size=9 Parameter #0 Precision=3 Parameter #0 Scale=7 Parameter #0 Value=msg1 Add Parameter Parameter #0 CreateParameter(1) Parameter #1 Direction=Input Parameter #1 Name=lvl Parameter #1 Scale=7 Parameter #1 Value=Info Add Parameter Parameter #1 CreateParameter(2) Parameter #2 Direction=Input Parameter #2 Name=lg Parameter #2 Value=MyLogger Add Parameter Parameter #2 ExecuteNonQuery: INSERT INTO FooBar VALUES(@msg, @lvl, @lg) CreateParameter(0) Parameter #0 Direction=Input Parameter #0 Name=msg Parameter #0 Size=9 Parameter #0 Precision=3 Parameter #0 Scale=7 Parameter #0 Value=msg3 Add Parameter Parameter #0 CreateParameter(1) Parameter #1 Direction=Input Parameter #1 Name=lvl Parameter #1 Scale=7 Parameter #1 Value=Debug Add Parameter Parameter #1 CreateParameter(2) Parameter #2 Direction=Input Parameter #2 Name=lg Parameter #2 Value=MyLogger2 Add Parameter Parameter #2 ExecuteNonQuery: INSERT INTO FooBar VALUES(@msg, @lvl, @lg) Close() Dispose() "; AssertLog(expectedLog); }
public void KeepConnectionOpenBatchedTest() { MockDbConnection.ClearLog(); DatabaseTarget dt = new DatabaseTarget() { CommandText = "INSERT INTO FooBar VALUES('${message}')", ConnectionString = "FooBar", DBProvider = typeof(MockDbConnection).AssemblyQualifiedName, KeepConnection = true, }; dt.Initialize(null); Assert.Same(typeof(MockDbConnection), dt.ConnectionType); var exceptions = new List<Exception>(); var events = new[] { new LogEventInfo(LogLevel.Info, "MyLogger", "msg1").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Info, "MyLogger", "msg2").WithContinuation(exceptions.Add), new LogEventInfo(LogLevel.Info, "MyLogger", "msg3").WithContinuation(exceptions.Add), }; dt.WriteAsyncLogEvents(events); foreach (var ex in exceptions) { Assert.Null(ex); } string expectedLog = @"Open('FooBar'). ExecuteNonQuery: INSERT INTO FooBar VALUES('msg1') ExecuteNonQuery: INSERT INTO FooBar VALUES('msg2') ExecuteNonQuery: INSERT INTO FooBar VALUES('msg3') "; AssertLog(expectedLog); MockDbConnection.ClearLog(); dt.Close(); expectedLog = @"Close() Dispose() "; AssertLog(expectedLog); }