public void Test_DbCommandInterceptor_IgnoreParams() { var inserted = new List <AuditEventCommandEntityFramework>(); Audit.Core.Configuration.Setup() .UseDynamicProvider(_ => _ .OnInsert(ev => inserted.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson())))) .WithCreationPolicy(EventCreationPolicy.InsertOnEnd); Audit.EntityFramework.Configuration.Setup() .ForContext <DbCommandInterceptContext>(_ => _ .IncludeEntityObjects(true)); using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().Options)) { ctx.Database.EnsureCreated(); } var interceptor = new AuditCommandInterceptor() { LogParameterValues = false }; using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().AddInterceptors(interceptor).Options)) { //NonQueryExecuting var result = ctx.Database.ExecuteSqlRaw("SELECT {0}", "test"); } Assert.AreEqual(1, inserted.Count); Assert.IsNull(inserted[0].CommandEvent.Parameters); }
public void Test_DbCommandInterceptor_HappyPath() { var inserted = new List <AuditEventCommandEntityFramework>(); var replaced = new List <AuditEventCommandEntityFramework>(); Audit.Core.Configuration.Setup() .UseDynamicProvider(_ => _ .OnInsert(ev => inserted.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson()))) .OnReplace((eventId, ev) => replaced.Add(AuditEvent.FromJson <AuditEventCommandEntityFramework>(ev.ToJson())))) .WithCreationPolicy(EventCreationPolicy.InsertOnEnd); Audit.EntityFramework.Configuration.Setup() .ForContext <DbCommandInterceptContext>(_ => _ .IncludeEntityObjects(true)); using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().Options)) { // not intercepted ctx.Database.EnsureDeleted(); ctx.Database.EnsureCreated(); } var interceptor = new AuditCommandInterceptor() { AuditEventType = "{database}:{method}" }; int id = new Random().Next(); using (var ctx = new DbCommandInterceptContext(new DbContextOptionsBuilder().AddInterceptors(interceptor).Options)) { //ReaderExecuting var depts = ctx.Departments.Where(d => d.Comments != null).FirstOrDefault(); //NonQueryExecuting var result = ctx.Database.ExecuteSqlRaw("INSERT INTO DEPARTMENTS (Id, Name, Comments) VALUES ({0}, 'test', {1})", id, "comments"); Assert.AreEqual(1, result); } Assert.AreEqual(2, inserted.Count); Assert.AreEqual(0, replaced.Count); Assert.IsTrue(inserted[0].CommandEvent.CommandText.Contains("SELECT")); Assert.AreEqual(CommandType.Text, inserted[0].CommandEvent.CommandType); Assert.IsNotNull(inserted[0].CommandEvent.ConnectionId); Assert.IsNull(inserted[0].CommandEvent.ErrorMessage); Assert.IsFalse(inserted[0].CommandEvent.IsAsync); Assert.IsNull(inserted[0].CommandEvent.Parameters); Assert.IsNull(inserted[0].CommandEvent.Result); Assert.IsTrue(inserted[0].CommandEvent.Success); Assert.AreEqual("DbCommandIntercept:ExecuteReader", inserted[0].EventType); Assert.AreEqual("DbCommandIntercept:ExecuteNonQuery", inserted[1].EventType); Assert.AreEqual(DbCommandMethod.ExecuteNonQuery, inserted[1].CommandEvent.Method); Assert.IsTrue(inserted[1].CommandEvent.CommandText.Contains("INSERT INTO DEPARTMENTS")); Assert.AreEqual(CommandType.Text, inserted[1].CommandEvent.CommandType); Assert.IsNotNull(inserted[1].CommandEvent.ConnectionId); Assert.IsNull(inserted[1].CommandEvent.ErrorMessage); Assert.IsFalse(inserted[1].CommandEvent.IsAsync); Assert.AreEqual(2, inserted[1].CommandEvent.Parameters.Count); Assert.IsTrue(inserted[1].CommandEvent.Parameters.Any(p => p.Value.ToString() == "comments")); Assert.IsTrue(inserted[1].CommandEvent.Parameters.Any(p => p.Value.ToString() == id.ToString())); Assert.AreEqual("1", inserted[1].CommandEvent.Result.ToString()); Assert.IsTrue(inserted[1].CommandEvent.Success); Assert.AreEqual(inserted[0].CommandEvent.ConnectionId, inserted[1].CommandEvent.ConnectionId); }