130 lines
2.5 KiB
Go
130 lines
2.5 KiB
Go
package mdb
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestItemMap(t *testing.T) {
|
|
|
|
// expected is a map of users.
|
|
run := func(name string, inner func(t *testing.T, db *DB) (expected map[uint64]*User)) {
|
|
testWithDB(t, name, func(t *testing.T, db *DB) {
|
|
expected := inner(t, db)
|
|
|
|
if err := db.Users.c.items.EqualsMap(expected); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
db.WaitForWAL()
|
|
|
|
if err := db.Users.c.items.EqualsKV(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
db.Close()
|
|
db = OpenDB(db.root, true)
|
|
|
|
if err := db.Users.c.items.EqualsMap(expected); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := db.Users.c.items.EqualsKV(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|
|
|
|
run("simple", func(t *testing.T, db *DB) (expected map[uint64]*User) {
|
|
users := map[uint64]*User{}
|
|
c := db.Users.c
|
|
for i := uint64(1); i < 10; i++ {
|
|
id := c.NextID()
|
|
users[id] = &User{
|
|
ID: id,
|
|
Email: fmt.Sprintf("a.%d@c.com", i),
|
|
Name: fmt.Sprintf("name.%d", i),
|
|
ExtID: fmt.Sprintf("EXTID.%d", i),
|
|
}
|
|
user, err := c.Insert(*users[id])
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(user, *users[id]) {
|
|
t.Fatal(user, *users[id])
|
|
}
|
|
}
|
|
|
|
return users
|
|
})
|
|
|
|
run("insert and delete", func(t *testing.T, db *DB) (expected map[uint64]*User) {
|
|
users := map[uint64]*User{}
|
|
c := db.Users.c
|
|
for x := uint64(1); x < 10; x++ {
|
|
id := c.NextID()
|
|
users[id] = &User{
|
|
ID: id,
|
|
Email: fmt.Sprintf("a.%d@c.com", x),
|
|
Name: fmt.Sprintf("name.%d", x),
|
|
ExtID: fmt.Sprintf("EXTID.%d", x),
|
|
}
|
|
user, err := c.Insert(*users[id])
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(user, *users[id]) {
|
|
t.Fatal(user, *users[id])
|
|
}
|
|
}
|
|
|
|
var id uint64
|
|
for key := range users {
|
|
id = key
|
|
}
|
|
|
|
delete(users, id)
|
|
c.Delete(id)
|
|
|
|
return users
|
|
})
|
|
|
|
run("update", func(t *testing.T, db *DB) (expected map[uint64]*User) {
|
|
users := map[uint64]*User{}
|
|
c := db.Users.c
|
|
for x := uint64(1); x < 10; x++ {
|
|
id := c.NextID()
|
|
users[id] = &User{
|
|
ID: id,
|
|
Email: fmt.Sprintf("a.%d@c.com", x),
|
|
Name: fmt.Sprintf("name.%d", x),
|
|
ExtID: fmt.Sprintf("EXTID.%d", x),
|
|
}
|
|
user, err := c.Insert(*users[id])
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(user, *users[id]) {
|
|
t.Fatal(user, *users[id])
|
|
}
|
|
}
|
|
|
|
var id uint64
|
|
for key := range users {
|
|
id = key
|
|
}
|
|
|
|
err := c.Update(id, func(u User) (User, error) {
|
|
u.Name = "Hello"
|
|
return u, nil
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
users[id].Name = "Hello"
|
|
|
|
return users
|
|
})
|
|
}
|