1
1
import tape from 'tape'
2
2
import { DB , BatchDBOp } from '../src/db'
3
3
4
- tape ( 'DB basic functionality ' , ( t ) => {
4
+ tape ( 'DB tests ' , ( t ) => {
5
5
const db = new DB ( )
6
6
7
- const k = Buffer . from ( 'foo' )
8
- const v = Buffer . from ( 'bar' )
7
+ const k = Buffer . from ( 'k1' )
8
+ const v = Buffer . from ( 'v1' )
9
+ const k2 = Buffer . from ( 'k2' )
10
+ const v2 = Buffer . from ( 'v2' )
11
+ //const k3 = Buffer.from('k3')
12
+ const v3 = Buffer . from ( 'v3' )
9
13
10
- t . test ( 'puts and gets value' , async ( st ) => {
14
+ t . test ( 'Operations: puts and gets value' , async ( st ) => {
11
15
await db . put ( k , v )
12
16
const res = await db . get ( k )
13
17
st . ok ( v . equals ( res ! ) )
14
18
st . end ( )
15
19
} )
16
20
17
- t . test ( 'deletes value' , async ( st ) => {
21
+ t . test ( 'Operations: deletes value' , async ( st ) => {
18
22
await db . del ( k )
19
23
const res = await db . get ( k )
20
24
st . notOk ( res )
21
25
st . end ( )
22
26
} )
23
27
24
- t . test ( 'batch ops' , async ( st ) => {
25
- const k2 = Buffer . from ( 'bar' )
26
- const v2 = Buffer . from ( 'baz' )
28
+ t . test ( 'Operations: batch ops' , async ( st ) => {
27
29
const ops = [
28
30
{ type : 'put' , key : k , value : v } ,
29
31
{ type : 'put' , key : k2 , value : v2 } ,
@@ -33,4 +35,68 @@ tape('DB basic functionality', (t) => {
33
35
st . ok ( v2 . equals ( res ! ) )
34
36
st . end ( )
35
37
} )
38
+
39
+ t . test ( 'Checkpointing: revert -> put (add)' , async ( st ) => {
40
+ const db = new DB ( )
41
+ db . checkpoint ( Buffer . from ( '1' , 'hex' ) )
42
+ await db . put ( k , v )
43
+ st . deepEqual ( await db . get ( k ) , v , 'before revert: v1' )
44
+ await db . revert ( )
45
+ st . deepEqual ( await db . get ( k ) , null , 'after revert: null' )
46
+ st . end ( )
47
+ } )
48
+
49
+ t . test ( 'Checkpointing: revert -> put (update)' , async ( st ) => {
50
+ const db = new DB ( )
51
+ await db . put ( k , v )
52
+ st . deepEqual ( await db . get ( k ) , v , 'before CP: v1' )
53
+ db . checkpoint ( Buffer . from ( '1' , 'hex' ) )
54
+ await db . put ( k , v2 )
55
+ await db . put ( k , v3 )
56
+ await db . revert ( )
57
+ st . deepEqual ( await db . get ( k ) , v , 'after revert: v1' )
58
+ st . end ( )
59
+ } )
60
+
61
+ t . test ( 'Checkpointing: revert -> put (update) batched' , async ( st ) => {
62
+ const db = new DB ( )
63
+ await db . put ( k , v )
64
+ st . deepEqual ( await db . get ( k ) , v , 'before CP: v1' )
65
+ db . checkpoint ( Buffer . from ( '1' , 'hex' ) )
66
+ const ops = [
67
+ { type : 'put' , key : k , value : v2 } ,
68
+ { type : 'put' , key : k , value : v3 } ,
69
+ ] as BatchDBOp [ ]
70
+ await db . batch ( ops )
71
+ await db . revert ( )
72
+ st . deepEqual ( await db . get ( k ) , v , 'after revert: v1' )
73
+ st . end ( )
74
+ } )
75
+
76
+ t . test ( 'Checkpointing: revert -> del' , async ( st ) => {
77
+ const db = new DB ( )
78
+ await db . put ( k , v )
79
+ st . deepEqual ( await db . get ( k ) , v , 'before CP: v1' )
80
+ db . checkpoint ( Buffer . from ( '1' , 'hex' ) )
81
+ await db . del ( k )
82
+ st . deepEqual ( await db . get ( k ) , null , 'before revert: null' )
83
+ await db . revert ( )
84
+ st . deepEqual ( await db . get ( k ) , v , 'after revert: v1' )
85
+ st . end ( )
86
+ } )
87
+
88
+ t . test ( 'Checkpointing: nested checkpoints -> commit -> revert' , async ( st ) => {
89
+ const db = new DB ( )
90
+ await db . put ( k , v )
91
+ st . deepEqual ( await db . get ( k ) , v , 'before CP: v1' )
92
+ db . checkpoint ( Buffer . from ( '1' , 'hex' ) )
93
+ await db . put ( k , v2 )
94
+ db . checkpoint ( Buffer . from ( '2' , 'hex' ) )
95
+ await db . put ( k , v3 )
96
+ db . commit ( )
97
+ st . deepEqual ( await db . get ( k ) , v3 , 'after commit (second CP): v3' )
98
+ await db . revert ( )
99
+ st . deepEqual ( await db . get ( k ) , v , 'after revert (first CP): v1' )
100
+ st . end ( )
101
+ } )
36
102
} )
0 commit comments