// Needles get needles from sync.Pool. func (s *Store) Needles(i int) *needle.Needles { var n interface{} if n = s.nsp[i].Get(); n != nil { return n.(*needle.Needles) } return needle.NewNeedles(i, s.conf.NeedleMaxSize) }
func TestVolume(t *testing.T) { var ( v *Volume err error data = []byte("test") bfile = "../test/test1" ifile = "../test/test1.idx" n = &needle.Needle{} ns = needle.NewNeedles(3, _bo.NeedleMaxSize) buf = &bytes.Buffer{} ) os.Remove(bfile) os.Remove(ifile) defer os.Remove(bfile) defer os.Remove(ifile) if v, err = NewVolume(1, bfile, ifile, _vo, _bo, _io); err != nil { t.Errorf("NewVolume() error(%v)", err) t.FailNow() } v.Close() // test open if err = v.Open(); err != nil { t.Errorf("Open() error(%v)", err) t.FailNow() } defer v.Close() n.Buffer = make([]byte, _bo.NeedleMaxSize) n.Init(1, 1, data) n.Write() if err = v.Add(n); err != nil { t.Errorf("Add() error(%v)", err) t.FailNow() } if err = v.Add(n); err != nil { t.Errorf("Add() error(%v)", err) t.FailNow() } n.Init(2, 2, data) n.Write() if err = v.Add(n); err != nil { t.Errorf("Add() error(%v)", err) t.FailNow() } n.Init(3, 3, data) n.Write() if err = v.Add(n); err != nil { t.Errorf("Add() error(%v)", err) t.FailNow() } buf.Write(data) if err = ns.WriteFrom(4, 4, 4, buf); err != nil { t.Errorf("ns.Write() error(%v)", err) t.FailNow() } buf.Write(data) if err = ns.WriteFrom(5, 5, 4, buf); err != nil { t.Errorf("ns.Write() error(%v)", err) t.FailNow() } buf.Write(data) if err = ns.WriteFrom(6, 6, 4, buf); err != nil { t.Errorf("ns.Write() error(%v)", err) t.FailNow() } if err = v.Write(ns); err != nil { t.Errorf("Write() error(%v)", err) t.FailNow() } if err = v.Del(3); err != nil { t.Errorf("Del error(%v)", err) t.FailNow() } n.Key = 3 n.Cookie = 3 if err = v.Get(n); err != errors.ErrNeedleDeleted { t.Error("err must be ErrNeedleDeleted") t.FailNow() } else { err = nil } }