func (s *txnSuite) TestRetryHooks(c *gc.C) { s.insertDoc(c, "1", "Foo") defer txntesting.SetRetryHooks(c, s.txnRunner, func() { s.setDocName(c, "1", "Bar") }, func() { s.setDocName(c, "1", "Foo") }).Check() maxAttempt := 0 buildTxn := func(attempt int) ([]txn.Op, error) { maxAttempt = attempt ops := []txn.Op{{ C: s.collection.Name, Id: "1", Assert: bson.D{{"name", "Foo"}}, Update: bson.D{{"$set", bson.D{{"name", "FooBar"}}}}, }} return ops, nil } err := s.txnRunner.Run(buildTxn) c.Assert(err, gc.IsNil) c.Assert(maxAttempt, gc.Equals, 2) var found simpleDoc err = s.collection.FindId("1").One(&found) c.Assert(err, gc.IsNil) doc := simpleDoc{"1", "FooBar"} c.Assert(found, gc.DeepEquals, doc) }
func SetRetryHooks(c *gc.C, st *State, block, check func()) txntesting.TransactionChecker { return txntesting.SetRetryHooks(c, st.transactionRunner, block, check) }