public void TransactionManagerCommitsAll() { var seed = new Seed32(); var hits = 0; using (var manager = new TransactionManager<int, MockClassA>() ) { manager.TransactionCommitted += new TransactionCommit<int, MockClassA> (delegate(ITransaction<int, MockClassA> transaction) { Assert.AreEqual(3, transaction.GetEnlistedActions().Count()); hits++; transaction.MarkComplete(); }); var testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); using (var tLock1 = manager.BeginTransaction()) { foreach (var entity in testEntities) tLock1.Transaction.Enlist(Action.Create, entity.Id, entity); using (var tLock2 = manager.BeginTransaction()) { testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); foreach (var entity in testEntities) tLock2.Transaction.Enlist(Action.Create, entity.Id, entity); using (var tLock3 = manager.BeginTransaction()) { testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); foreach (var entity in testEntities) tLock3.Transaction.Enlist(Action.Create, entity.Id, entity); using (var tLock4 = manager.BeginTransaction()) { testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); foreach (var entity in testEntities) tLock4.Transaction.Enlist(Action.Create, entity.Id, entity); using (var tLock5 = manager.BeginTransaction()) { testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); foreach (var entity in testEntities) tLock5.Transaction.Enlist(Action.Create, entity.Id, entity); Assert.AreEqual(3, manager.GetActiveItems().Count); manager.CommitAll(true); Assert.IsTrue(tLock5.Transaction.IsComplete); } } } } } Assert.AreEqual(0, manager.GetActiveItems().Count); } }
public void TransactionManagerCommitAllCommitsAllTransactions() { var sync = new object(); var seed = new Seed32(); var hits = 0; using (var manager = new TransactionManager<int, MockClassA>()) { manager.TransactionCommitted += new TransactionCommit<int, MockClassA> (delegate(ITransaction<int, MockClassA> transaction) { Assert.AreEqual(3, transaction.GetEnlistedActions().Count()); hits++; transaction.MarkComplete(); }); var transList = new List<TransactionLock<int, MockClassA>>(); Parallel.For(0, 5, delegate(int i) { var testEntities = TestResourceFactory.GetMockClassAObjects(3).ToList(); testEntities.ForEach(e => e.Id = seed.Increment()); var trans = manager.BeginTransaction(); foreach (var entity in testEntities) trans.Transaction.Enlist(Action.Create, entity.Id, entity); if (i == 1) { lock (sync) transList.Add(trans); Assert.AreEqual(3, manager.GetCached().Count()); } else trans.Transaction.Commit(); }); manager.CommitAll(true); Assert.AreEqual(0, manager.GetCached().Count()); } Assert.AreEqual(5, hits); }