OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / syndtr / goleveldb / leveldb / external_test.go
1 // Copyright (c) 2014, Suryandaru Triandana <syndtr@gmail.com>
2 // All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
6
7 package leveldb
8
9 import (
10         . "github.com/onsi/ginkgo"
11         . "github.com/onsi/gomega"
12
13         "github.com/syndtr/goleveldb/leveldb/opt"
14         "github.com/syndtr/goleveldb/leveldb/testutil"
15 )
16
17 var _ = testutil.Defer(func() {
18         Describe("Leveldb external", func() {
19                 o := &opt.Options{
20                         DisableBlockCache:      true,
21                         BlockRestartInterval:   5,
22                         BlockSize:              80,
23                         Compression:            opt.NoCompression,
24                         OpenFilesCacheCapacity: -1,
25                         Strict:                 opt.StrictAll,
26                         WriteBuffer:            1000,
27                         CompactionTableSize:    2000,
28                 }
29
30                 Describe("write test", func() {
31                         It("should do write correctly", func(done Done) {
32                                 db := newTestingDB(o, nil, nil)
33                                 t := testutil.DBTesting{
34                                         DB:      db,
35                                         Deleted: testutil.KeyValue_Generate(nil, 500, 1, 1, 50, 5, 5).Clone(),
36                                 }
37                                 testutil.DoDBTesting(&t)
38                                 db.TestClose()
39                                 done <- true
40                         }, 80.0)
41                 })
42
43                 Describe("read test", func() {
44                         testutil.AllKeyValueTesting(nil, nil, func(kv testutil.KeyValue) testutil.DB {
45                                 // Building the DB.
46                                 db := newTestingDB(o, nil, nil)
47                                 kv.IterateShuffled(nil, func(i int, key, value []byte) {
48                                         err := db.TestPut(key, value)
49                                         Expect(err).NotTo(HaveOccurred())
50                                 })
51
52                                 return db
53                         }, func(db testutil.DB) {
54                                 db.(*testingDB).TestClose()
55                         })
56                 })
57
58                 Describe("transaction test", func() {
59                         It("should do transaction correctly", func(done Done) {
60                                 db := newTestingDB(o, nil, nil)
61
62                                 By("creating first transaction")
63                                 var err error
64                                 tr := &testingTransaction{}
65                                 tr.Transaction, err = db.OpenTransaction()
66                                 Expect(err).NotTo(HaveOccurred())
67                                 t0 := &testutil.DBTesting{
68                                         DB:      tr,
69                                         Deleted: testutil.KeyValue_Generate(nil, 200, 1, 1, 50, 5, 5).Clone(),
70                                 }
71                                 testutil.DoDBTesting(t0)
72                                 testutil.TestGet(tr, t0.Present)
73                                 testutil.TestHas(tr, t0.Present)
74
75                                 By("committing first transaction")
76                                 err = tr.Commit()
77                                 Expect(err).NotTo(HaveOccurred())
78                                 testutil.TestIter(db, nil, t0.Present)
79                                 testutil.TestGet(db, t0.Present)
80                                 testutil.TestHas(db, t0.Present)
81
82                                 By("manipulating DB without transaction")
83                                 t0.DB = db
84                                 testutil.DoDBTesting(t0)
85
86                                 By("creating second transaction")
87                                 tr.Transaction, err = db.OpenTransaction()
88                                 Expect(err).NotTo(HaveOccurred())
89                                 t1 := &testutil.DBTesting{
90                                         DB:      tr,
91                                         Deleted: t0.Deleted.Clone(),
92                                         Present: t0.Present.Clone(),
93                                 }
94                                 testutil.DoDBTesting(t1)
95                                 testutil.TestIter(db, nil, t0.Present)
96
97                                 By("discarding second transaction")
98                                 tr.Discard()
99                                 testutil.TestIter(db, nil, t0.Present)
100
101                                 By("creating third transaction")
102                                 tr.Transaction, err = db.OpenTransaction()
103                                 Expect(err).NotTo(HaveOccurred())
104                                 t0.DB = tr
105                                 testutil.DoDBTesting(t0)
106
107                                 By("committing third transaction")
108                                 err = tr.Commit()
109                                 Expect(err).NotTo(HaveOccurred())
110                                 testutil.TestIter(db, nil, t0.Present)
111
112                                 db.TestClose()
113                                 done <- true
114                         }, 240.0)
115                 })
116         })
117 })