128 lines
3.0 KiB
Go
128 lines
3.0 KiB
Go
package index_test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/asdine/storm"
|
|
"github.com/asdine/storm/index"
|
|
"github.com/boltdb/bolt"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestListIndex(t *testing.T) {
|
|
dir, _ := ioutil.TempDir(os.TempDir(), "storm")
|
|
defer os.RemoveAll(dir)
|
|
db, _ := storm.Open(filepath.Join(dir, "storm.db"))
|
|
defer db.Close()
|
|
|
|
err := db.Bolt.Update(func(tx *bolt.Tx) error {
|
|
b, err := tx.CreateBucket([]byte("test"))
|
|
assert.NoError(t, err)
|
|
|
|
idx, err := index.NewListIndex(b, []byte("lindex1"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("hello"), []byte("id1"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("hello"), []byte("id1"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("hello"), []byte("id2"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("goodbye"), []byte("id2"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add(nil, []byte("id2"))
|
|
assert.Error(t, err)
|
|
assert.Equal(t, index.ErrNilParam, err)
|
|
|
|
err = idx.Add([]byte("hi"), nil)
|
|
assert.Error(t, err)
|
|
assert.Equal(t, index.ErrNilParam, err)
|
|
|
|
ids, err := idx.All([]byte("hello"), nil)
|
|
assert.Len(t, ids, 1)
|
|
assert.Equal(t, []byte("id1"), ids[0])
|
|
|
|
ids, err = idx.All([]byte("goodbye"), nil)
|
|
assert.Len(t, ids, 1)
|
|
assert.Equal(t, []byte("id2"), ids[0])
|
|
|
|
ids, err = idx.All([]byte("yo"), nil)
|
|
assert.Nil(t, ids)
|
|
|
|
err = idx.RemoveID([]byte("id2"))
|
|
assert.NoError(t, err)
|
|
|
|
ids, err = idx.All([]byte("goodbye"), nil)
|
|
assert.Len(t, ids, 0)
|
|
|
|
err = idx.RemoveID(nil)
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.RemoveID([]byte("id1"))
|
|
assert.NoError(t, err)
|
|
err = idx.RemoveID([]byte("id2"))
|
|
assert.NoError(t, err)
|
|
err = idx.RemoveID([]byte("id3"))
|
|
assert.NoError(t, err)
|
|
|
|
ids, err = idx.All([]byte("hello"), nil)
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, ids)
|
|
|
|
err = idx.Add([]byte("hello"), []byte("id1"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("hi"), []byte("id2"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("yo"), []byte("id3"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.RemoveID([]byte("id2"))
|
|
assert.NoError(t, err)
|
|
|
|
ids, err = idx.All([]byte("hello"), nil)
|
|
assert.Len(t, ids, 1)
|
|
assert.Equal(t, []byte("id1"), ids[0])
|
|
ids, err = idx.All([]byte("hi"), nil)
|
|
assert.Len(t, ids, 0)
|
|
ids, err = idx.All([]byte("yo"), nil)
|
|
assert.Len(t, ids, 1)
|
|
assert.Equal(t, []byte("id3"), ids[0])
|
|
|
|
err = idx.RemoveID([]byte("id2"))
|
|
assert.NoError(t, err)
|
|
err = idx.RemoveID([]byte("id4"))
|
|
assert.NoError(t, err)
|
|
|
|
err = idx.Add([]byte("hey"), []byte("id1"))
|
|
err = idx.Add([]byte("hey"), []byte("id2"))
|
|
err = idx.Add([]byte("hey"), []byte("id3"))
|
|
err = idx.Add([]byte("hey"), []byte("id4"))
|
|
ids, err = idx.All([]byte("hey"), nil)
|
|
assert.Len(t, ids, 4)
|
|
|
|
id := idx.Get([]byte("hey"))
|
|
assert.Equal(t, []byte("id1"), id)
|
|
|
|
idx.Remove([]byte("hey"))
|
|
ids, err = idx.All([]byte("hey"), nil)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, ids, 0)
|
|
|
|
ids, err = idx.All([]byte("hey"), nil)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, ids, 0)
|
|
return nil
|
|
})
|
|
|
|
assert.NoError(t, err)
|
|
}
|