82 lines
1.5 KiB
Go
82 lines
1.5 KiB
Go
package client
|
|
|
|
import (
|
|
"github.com/go-stomp/stomp/v3/frame"
|
|
. "gopkg.in/check.v1"
|
|
)
|
|
|
|
type TxStoreSuite struct{}
|
|
|
|
var _ = Suite(&TxStoreSuite{})
|
|
|
|
func (s *TxStoreSuite) TestDoubleBegin(c *C) {
|
|
txs := txStore{}
|
|
|
|
err := txs.Begin("tx1")
|
|
c.Assert(err, IsNil)
|
|
|
|
err = txs.Begin("tx1")
|
|
c.Assert(err, Equals, txAlreadyInProgress)
|
|
}
|
|
|
|
func (s *TxStoreSuite) TestSuccessfulTx(c *C) {
|
|
txs := txStore{}
|
|
|
|
err := txs.Begin("tx1")
|
|
c.Check(err, IsNil)
|
|
|
|
err = txs.Begin("tx2")
|
|
c.Assert(err, IsNil)
|
|
|
|
f1 := frame.New(frame.MESSAGE,
|
|
frame.Destination, "/queue/1")
|
|
|
|
f2 := frame.New(frame.MESSAGE,
|
|
frame.Destination, "/queue/2")
|
|
|
|
f3 := frame.New(frame.MESSAGE,
|
|
frame.Destination, "/queue/3")
|
|
|
|
f4 := frame.New(frame.MESSAGE,
|
|
frame.Destination, "/queue/4")
|
|
|
|
err = txs.Add("tx1", f1)
|
|
c.Assert(err, IsNil)
|
|
err = txs.Add("tx1", f2)
|
|
c.Assert(err, IsNil)
|
|
err = txs.Add("tx1", f3)
|
|
c.Assert(err, IsNil)
|
|
err = txs.Add("tx2", f4)
|
|
|
|
var tx1 []*frame.Frame
|
|
|
|
txs.Commit("tx1", func(f *frame.Frame) error {
|
|
tx1 = append(tx1, f)
|
|
return nil
|
|
})
|
|
c.Check(err, IsNil)
|
|
|
|
var tx2 []*frame.Frame
|
|
|
|
err = txs.Commit("tx2", func(f *frame.Frame) error {
|
|
tx2 = append(tx2, f)
|
|
return nil
|
|
})
|
|
c.Check(err, IsNil)
|
|
|
|
c.Check(len(tx1), Equals, 3)
|
|
c.Check(tx1[0], Equals, f1)
|
|
c.Check(tx1[1], Equals, f2)
|
|
c.Check(tx1[2], Equals, f3)
|
|
|
|
c.Check(len(tx2), Equals, 1)
|
|
c.Check(tx2[0], Equals, f4)
|
|
|
|
// already committed, so should cause an error
|
|
err = txs.Commit("tx1", func(f *frame.Frame) error {
|
|
c.Fatal("should not be called")
|
|
return nil
|
|
})
|
|
c.Check(err, Equals, txUnknown)
|
|
}
|