1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
package lmdb
import (
"fmt"
"io/ioutil"
"os"
"testing"
)
func TestTest1(t *testing.T) {
env, err := NewEnv()
if err != nil {
t.Fatalf("Cannot create environment: %s", err)
}
err = env.SetMapSize(10485760)
if err != nil {
t.Fatalf("Cannot set mapsize: %s", err)
}
path, err := ioutil.TempDir("", "mdb_test")
if err != nil {
t.Fatalf("Cannot create temporary directory")
}
err = os.MkdirAll(path, 0770)
defer os.RemoveAll(path)
if err != nil {
t.Fatalf("Cannot create directory: %s", path)
}
err = env.Open(path, 0, 0664)
defer env.Close()
if err != nil {
t.Fatalf("Cannot open environment: %s", err)
}
var db DBI
numEntries := 10
var data = map[string]string{}
var key string
var val string
for i := 0; i < numEntries; i++ {
key = fmt.Sprintf("Key-%d", i)
val = fmt.Sprintf("Val-%d", i)
data[key] = val
}
err = env.Update(func(txn *Txn) (err error) {
db, err = txn.OpenRoot(0)
if err != nil {
return err
}
for k, v := range data {
err = txn.Put(db, []byte(k), []byte(v), NoOverwrite)
if err != nil {
return fmt.Errorf("put: %v", err)
}
}
return nil
})
if err != nil {
t.Fatal(err)
}
stat, err := env.Stat()
if err != nil {
t.Fatalf("Cannot get stat %s", err)
} else if stat.Entries != uint64(numEntries) {
t.Errorf("Less entry in the database than expected: %d <> %d", stat.Entries, numEntries)
}
t.Logf("%#v", stat)
err = env.View(func(txn *Txn) error {
cursor, err := txn.OpenCursor(db)
if err != nil {
cursor.Close()
return fmt.Errorf("cursor: %v", err)
}
var bkey, bval []byte
var bNumVal int
for {
bkey, bval, err = cursor.Get(nil, nil, Next)
if IsNotFound(err) {
break
}
if err != nil {
return fmt.Errorf("cursor get: %v", err)
}
bNumVal++
skey := string(bkey)
sval := string(bval)
t.Logf("Val: %s", sval)
t.Logf("Key: %s", skey)
var d string
var ok bool
if d, ok = data[skey]; !ok {
return fmt.Errorf("cursor get: key does not exist %q", skey)
}
if d != sval {
return fmt.Errorf("cursor get: value %q does not match %q", sval, d)
}
}
if bNumVal != numEntries {
t.Errorf("cursor iterated over %d entries when %d expected", bNumVal, numEntries)
}
cursor.Close()
bval, err = txn.Get(db, []byte("Key-0"))
if err != nil {
return fmt.Errorf("get: %v", err)
}
if string(bval) != "Val-0" {
return fmt.Errorf("get: value %q does not match %q", bval, "Val-0")
}
return nil
})
if err != nil {
t.Fatal(err)
}
}
func TestVersion(t *testing.T) {
maj, min, patch, str := Version()
if maj < 0 || min < 0 || patch < 0 {
t.Error("invalid version number: ", maj, min, patch)
}
if maj == 0 && min == 0 && patch == 0 {
t.Error("invalid version number: ", maj, min, patch)
}
if str == "" {
t.Error("empty version string")
}
str = VersionString()
if str == "" {
t.Error("empty version string")
}
}
|