예제 #1
0
파일: store.go 프로젝트: wareseeker/bfs
// 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)
}
예제 #2
0
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
	}
}