| Index: impl/memory/memcache_test.go
|
| diff --git a/impl/memory/memcache_test.go b/impl/memory/memcache_test.go
|
| index 9aaefa534f13bf4f73f06693b9a594ddcb6f3178..441abe58a6eb86cbfd2c6baaf22fa3c60b3d550b 100644
|
| --- a/impl/memory/memcache_test.go
|
| +++ b/impl/memory/memcache_test.go
|
| @@ -25,16 +25,12 @@ func TestMemcache(t *testing.T) {
|
|
|
| Convey("implements MCSingleReadWriter", func() {
|
| Convey("Add", func() {
|
| - itm := &mcItem{
|
| - key: "sup",
|
| - value: []byte("cool"),
|
| - expiration: time.Second,
|
| - }
|
| - err := mc.Add(itm)
|
| - So(err, ShouldBeNil)
|
| + itm := (mc.NewItem("sup").
|
| + SetValue([]byte("cool")).
|
| + SetExpiration(time.Second))
|
| + So(mc.Add(itm), ShouldBeNil)
|
| Convey("which rejects objects already there", func() {
|
| - err := mc.Add(itm)
|
| - So(err, ShouldEqual, mcS.ErrNotStored)
|
| + So(mc.Add(itm), ShouldEqual, mcS.ErrNotStored)
|
| })
|
| })
|
|
|
| @@ -44,23 +40,24 @@ func TestMemcache(t *testing.T) {
|
| value: []byte("cool"),
|
| expiration: time.Second,
|
| }
|
| - err := mc.Add(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.Add(itm), ShouldBeNil)
|
|
|
| testItem := &mcItem{
|
| key: "sup",
|
| value: []byte("cool"),
|
| CasID: 1,
|
| }
|
| - i, err := mc.Get("sup")
|
| - So(err, ShouldBeNil)
|
| - So(i, ShouldResemble, testItem)
|
| + getItm := &mcItem{
|
| + key: "sup",
|
| + }
|
| + So(mc.Get(getItm), ShouldBeNil)
|
| + So(getItm, ShouldResemble, testItem)
|
|
|
| Convey("which can expire", func() {
|
| tc.Add(time.Second * 4)
|
| - i, err := mc.Get("sup")
|
| - So(err, ShouldEqual, mcS.ErrCacheMiss)
|
| - So(i, ShouldBeNil)
|
| + getItm := &mcItem{key: "sup"}
|
| + So(mc.Get(getItm), ShouldEqual, mcS.ErrCacheMiss)
|
| + So(getItm, ShouldResemble, &mcItem{key: "sup"})
|
| })
|
| })
|
|
|
| @@ -71,20 +68,15 @@ func TestMemcache(t *testing.T) {
|
| value: []byte("cool"),
|
| expiration: time.Second,
|
| }
|
| - err := mc.Add(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.Add(itm), ShouldBeNil)
|
|
|
| - err = mc.Delete("sup")
|
| - So(err, ShouldBeNil)
|
| + So(mc.Delete("sup"), ShouldBeNil)
|
|
|
| - i, err := mc.Get("sup")
|
| - So(err, ShouldEqual, mcS.ErrCacheMiss)
|
| - So(i, ShouldBeNil)
|
| + So(mc.Get(mc.NewItem("sup")), ShouldEqual, mcS.ErrCacheMiss)
|
| })
|
|
|
| Convey("but not if it's not there", func() {
|
| - err := mc.Delete("sup")
|
| - So(err, ShouldEqual, mcS.ErrCacheMiss)
|
| + So(mc.Delete("sup"), ShouldEqual, mcS.ErrCacheMiss)
|
| })
|
| })
|
|
|
| @@ -94,21 +86,48 @@ func TestMemcache(t *testing.T) {
|
| value: []byte("cool"),
|
| expiration: time.Second,
|
| }
|
| - err := mc.Add(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.Add(itm), ShouldBeNil)
|
|
|
| itm.SetValue([]byte("newp"))
|
| - err = mc.Set(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.Set(itm), ShouldBeNil)
|
|
|
| testItem := &mcItem{
|
| key: "sup",
|
| value: []byte("newp"),
|
| CasID: 2,
|
| }
|
| - i, err := mc.Get("sup")
|
| + getItm := mc.NewItem("sup")
|
| + So(mc.Get(getItm), ShouldBeNil)
|
| + So(getItm, ShouldResemble, testItem)
|
| +
|
| + Convey("Flush works too", func() {
|
| + mc.Flush()
|
| + So(mc.Get(getItm), ShouldEqual, mcS.ErrCacheMiss)
|
| + })
|
| + })
|
| +
|
| + Convey("Increment", func() {
|
| + val, err := mc.Increment("num", 7, 2)
|
| So(err, ShouldBeNil)
|
| - So(i, ShouldResemble, testItem)
|
| + So(val, ShouldEqual, 9)
|
| +
|
| + Convey("IncrementExisting", func() {
|
| + val, err := mc.IncrementExisting("num", -2)
|
| + So(err, ShouldBeNil)
|
| + So(val, ShouldEqual, 7)
|
| +
|
| + val, err = mc.IncrementExisting("num", -100)
|
| + So(err, ShouldBeNil)
|
| + So(val, ShouldEqual, 0)
|
| +
|
| + _, err = mc.IncrementExisting("noexist", 2)
|
| + So(err, ShouldEqual, mcS.ErrCacheMiss)
|
| +
|
| + So(mc.Set(mc.NewItem("text").SetValue([]byte("hello world, hooman!"))), ShouldBeNil)
|
| +
|
| + _, err = mc.IncrementExisting("text", 2)
|
| + So(err.Error(), ShouldContainSubstring, "got invalid current value")
|
| + })
|
| })
|
|
|
| Convey("CompareAndSwap", func() {
|
| @@ -117,30 +136,26 @@ func TestMemcache(t *testing.T) {
|
| value: []byte("cool"),
|
| expiration: time.Second * 2,
|
| })
|
| - err := mc.Add(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.Add(itm), ShouldBeNil)
|
|
|
| Convey("works after a Get", func() {
|
| - itm, err = mc.Get("sup")
|
| - So(err, ShouldBeNil)
|
| + itm = mc.NewItem("sup")
|
| + So(mc.Get(itm), ShouldBeNil)
|
| So(itm.(*mcItem).CasID, ShouldEqual, 1)
|
|
|
| itm.SetValue([]byte("newp"))
|
| - err = mc.CompareAndSwap(itm)
|
| - So(err, ShouldBeNil)
|
| + So(mc.CompareAndSwap(itm), ShouldBeNil)
|
| })
|
|
|
| Convey("but fails if you don't", func() {
|
| itm.SetValue([]byte("newp"))
|
| - err = mc.CompareAndSwap(itm)
|
| - So(err, ShouldEqual, mcS.ErrCASConflict)
|
| + So(mc.CompareAndSwap(itm), ShouldEqual, mcS.ErrCASConflict)
|
| })
|
|
|
| Convey("and fails if the item is expired/gone", func() {
|
| tc.Add(3 * time.Second)
|
| itm.SetValue([]byte("newp"))
|
| - err = mc.CompareAndSwap(itm)
|
| - So(err, ShouldEqual, mcS.ErrNotStored)
|
| + So(mc.CompareAndSwap(itm), ShouldEqual, mcS.ErrNotStored)
|
| })
|
| })
|
| })
|
| @@ -153,10 +168,22 @@ func TestMemcache(t *testing.T) {
|
| expiration: time.Second * 2,
|
| })
|
|
|
| - mci := mc.(*memcacheImpl)
|
| + mc.Get(mc.NewItem("sup"))
|
| + mc.Get(mc.NewItem("sup"))
|
| + mc.Get(mc.NewItem("sup"))
|
| + mc.Get(mc.NewItem("sup"))
|
| + mc.Get(mc.NewItem("wot"))
|
| +
|
| + mci := mc.Raw().(*memcacheImpl)
|
|
|
| So(err, ShouldBeNil)
|
| - So(len(mci.data.items), ShouldEqual, 1)
|
| + stats, err := mc.Stats()
|
| + So(err, ShouldBeNil)
|
| + So(stats.Items, ShouldEqual, 1)
|
| + So(stats.Bytes, ShouldEqual, 4)
|
| + So(stats.Hits, ShouldEqual, 4)
|
| + So(stats.Misses, ShouldEqual, 1)
|
| + So(stats.ByteHits, ShouldEqual, 4*4)
|
| So(mci.data.casID, ShouldEqual, 1)
|
| So(mci.data.items["sup"], ShouldResemble, &mcItem{
|
| key: "sup",
|
| @@ -165,8 +192,8 @@ func TestMemcache(t *testing.T) {
|
| CasID: 1,
|
| })
|
|
|
| - el, err := mc.Get("sup")
|
| - So(err, ShouldBeNil)
|
| + getItm := mc.NewItem("sup")
|
| + So(mc.Get(getItm), ShouldBeNil)
|
| So(len(mci.data.items), ShouldEqual, 1)
|
| So(mci.data.casID, ShouldEqual, 1)
|
|
|
| @@ -175,7 +202,7 @@ func TestMemcache(t *testing.T) {
|
| value: []byte("cool"),
|
| CasID: 1,
|
| }
|
| - So(el, ShouldResemble, testItem)
|
| + So(getItm, ShouldResemble, testItem)
|
| })
|
|
|
| })
|
|
|