@@ -23,7 +23,8 @@ import (
23
23
func TestIntermediateNodeDB (t * testing.T ) {
24
24
require := require .New (t )
25
25
26
- cacheSize := 100
26
+ // use exact multiple of node size so require.Equal(1, db.nodeCache.fifo.Len()) is correct later
27
+ cacheSize := 200
27
28
evictionBatchSize := cacheSize
28
29
baseDB := memdb .New ()
29
30
db := newIntermediateNodeDB (
@@ -37,49 +38,40 @@ func TestIntermediateNodeDB(t *testing.T) {
37
38
)
38
39
39
40
// Put a key-node pair
40
- key := newPath ([]byte {0x01 })
41
- node1 := & node {
42
- dbNode : dbNode {
43
- value : maybe .Some ([]byte {0x01 }),
44
- },
45
- }
46
- require .NoError (db .Put (key , node1 ))
41
+ node1Key := newPath ([]byte {0x01 })
42
+ node1 := newNode (nil , node1Key )
43
+ node1 .setValue (maybe .Some ([]byte {byte (0x01 )}))
44
+ require .NoError (db .Put (node1Key , node1 ))
47
45
48
46
// Get the key-node pair from cache
49
- node1Read , err := db .Get (key )
47
+ node1Read , err := db .Get (node1Key )
50
48
require .NoError (err )
51
49
require .Equal (node1 , node1Read )
52
50
53
51
// Overwrite the key-node pair
54
- node1Updated := & node {
55
- dbNode : dbNode {
56
- value : maybe .Some ([]byte {0x02 }),
57
- },
58
- }
59
- require .NoError (db .Put (key , node1Updated ))
52
+ node1Updated := newNode (nil , node1Key )
53
+ node1Updated .setValue (maybe .Some ([]byte {byte (0x02 )}))
54
+ require .NoError (db .Put (node1Key , node1Updated ))
60
55
61
56
// Assert the key-node pair was overwritten
62
- node1Read , err = db .Get (key )
57
+ node1Read , err = db .Get (node1Key )
63
58
require .NoError (err )
64
59
require .Equal (node1Updated , node1Read )
65
60
66
61
// Delete the key-node pair
67
- require .NoError (db .Delete (key ))
68
- _ , err = db .Get (key )
62
+ require .NoError (db .Delete (node1Key ))
63
+ _ , err = db .Get (node1Key )
69
64
70
65
// Assert the key-node pair was deleted
71
66
require .Equal (database .ErrNotFound , err )
72
67
73
68
// Put elements in the cache until it is full.
74
- expectedSize := cacheEntrySize ( key , nil )
69
+ expectedSize := 0
75
70
added := 0
76
71
for {
77
72
key := newPath ([]byte {byte (added )})
78
- node := & node {
79
- dbNode : dbNode {
80
- value : maybe .Some ([]byte {byte (added )}),
81
- },
82
- }
73
+ node := newNode (nil , EmptyPath )
74
+ node .setValue (maybe .Some ([]byte {byte (added )}))
83
75
newExpectedSize := expectedSize + cacheEntrySize (key , node )
84
76
if newExpectedSize > cacheSize {
85
77
// Don't trigger eviction.
@@ -97,24 +89,24 @@ func TestIntermediateNodeDB(t *testing.T) {
97
89
// Put one more element in the cache, which should trigger an eviction
98
90
// of all but 2 elements. 2 elements remain rather than 1 element because of
99
91
// the added key prefix increasing the size tracked by the batch.
100
- key = newPath ([]byte {byte (cacheSize )})
101
- node := & node {
102
- dbNode : dbNode {
103
- value : maybe .Some ([]byte {byte (cacheSize )}),
104
- },
105
- }
92
+ key := newPath ([]byte {byte (added )})
93
+ node := newNode (nil , EmptyPath )
94
+ node .setValue (maybe .Some ([]byte {byte (added )}))
106
95
require .NoError (db .Put (key , node ))
107
96
108
97
// Assert cache has expected number of elements
109
- require .Equal (2 , db .nodeCache .fifo .Len ())
98
+ require .Equal (1 , db .nodeCache .fifo .Len ())
110
99
gotKey , _ , ok := db .nodeCache .fifo .Oldest ()
111
100
require .True (ok )
112
- require .Equal (newPath ([]byte {byte (added - 1 )}), gotKey )
101
+ require .Equal (newPath ([]byte {byte (added )}), gotKey )
113
102
114
- // Get a node from the base database (not cache)
115
- nodeRead , err := db .Get (newPath ([]byte {0x03 }))
103
+ // Get a node from the base database
104
+ // Use an early key that has been evicted from the cache
105
+ _ , inCache := db .nodeCache .Get (node1Key )
106
+ require .False (inCache )
107
+ nodeRead , err := db .Get (node1Key )
116
108
require .NoError (err )
117
- require .Equal (maybe .Some ([]byte {0x03 }), nodeRead .value )
109
+ require .Equal (maybe .Some ([]byte {0x01 }), nodeRead .value )
118
110
119
111
// Flush the cache.
120
112
require .NoError (db .Flush ())
0 commit comments