github.com/onflow/flow-go@v0.33.17/storage/badger/operation/heights_test.go (about) 1 // (c) 2019 Dapper Labs - ALL RIGHTS RESERVED 2 3 package operation 4 5 import ( 6 "math/rand" 7 "testing" 8 9 "github.com/dgraph-io/badger/v2" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/onflow/flow-go/storage" 14 "github.com/onflow/flow-go/utils/unittest" 15 ) 16 17 func TestFinalizedInsertUpdateRetrieve(t *testing.T) { 18 unittest.RunWithBadgerDB(t, func(db *badger.DB) { 19 height := uint64(1337) 20 21 err := db.Update(InsertFinalizedHeight(height)) 22 require.NoError(t, err) 23 24 var retrieved uint64 25 err = db.View(RetrieveFinalizedHeight(&retrieved)) 26 require.NoError(t, err) 27 28 assert.Equal(t, retrieved, height) 29 30 height = 9999 31 err = db.Update(UpdateFinalizedHeight(height)) 32 require.NoError(t, err) 33 34 err = db.View(RetrieveFinalizedHeight(&retrieved)) 35 require.NoError(t, err) 36 37 assert.Equal(t, retrieved, height) 38 }) 39 } 40 41 func TestSealedInsertUpdateRetrieve(t *testing.T) { 42 unittest.RunWithBadgerDB(t, func(db *badger.DB) { 43 height := uint64(1337) 44 45 err := db.Update(InsertSealedHeight(height)) 46 require.NoError(t, err) 47 48 var retrieved uint64 49 err = db.View(RetrieveSealedHeight(&retrieved)) 50 require.NoError(t, err) 51 52 assert.Equal(t, retrieved, height) 53 54 height = 9999 55 err = db.Update(UpdateSealedHeight(height)) 56 require.NoError(t, err) 57 58 err = db.View(RetrieveSealedHeight(&retrieved)) 59 require.NoError(t, err) 60 61 assert.Equal(t, retrieved, height) 62 }) 63 } 64 65 func TestEpochFirstBlockIndex_InsertRetrieve(t *testing.T) { 66 unittest.RunWithBadgerDB(t, func(db *badger.DB) { 67 height := rand.Uint64() 68 epoch := rand.Uint64() 69 70 // retrieve when empty errors 71 var retrieved uint64 72 err := db.View(RetrieveEpochFirstHeight(epoch, &retrieved)) 73 require.ErrorIs(t, err, storage.ErrNotFound) 74 75 // can insert 76 err = db.Update(InsertEpochFirstHeight(epoch, height)) 77 require.NoError(t, err) 78 79 // can retrieve 80 err = db.View(RetrieveEpochFirstHeight(epoch, &retrieved)) 81 require.NoError(t, err) 82 assert.Equal(t, retrieved, height) 83 84 // retrieve non-existent key errors 85 err = db.View(RetrieveEpochFirstHeight(epoch+1, &retrieved)) 86 require.ErrorIs(t, err, storage.ErrNotFound) 87 88 // insert existent key errors 89 err = db.Update(InsertEpochFirstHeight(epoch, height)) 90 require.ErrorIs(t, err, storage.ErrAlreadyExists) 91 }) 92 } 93 94 func TestLastCompleteBlockHeightInsertUpdateRetrieve(t *testing.T) { 95 unittest.RunWithBadgerDB(t, func(db *badger.DB) { 96 height := uint64(1337) 97 98 err := db.Update(InsertLastCompleteBlockHeight(height)) 99 require.NoError(t, err) 100 101 var retrieved uint64 102 err = db.View(RetrieveLastCompleteBlockHeight(&retrieved)) 103 require.NoError(t, err) 104 105 assert.Equal(t, retrieved, height) 106 107 height = 9999 108 err = db.Update(UpdateLastCompleteBlockHeight(height)) 109 require.NoError(t, err) 110 111 err = db.View(RetrieveLastCompleteBlockHeight(&retrieved)) 112 require.NoError(t, err) 113 114 assert.Equal(t, retrieved, height) 115 }) 116 } 117 118 func TestLastCompleteBlockHeightInsertIfNotExists(t *testing.T) { 119 unittest.RunWithBadgerDB(t, func(db *badger.DB) { 120 height1 := uint64(1337) 121 122 err := db.Update(InsertLastCompleteBlockHeightIfNotExists(height1)) 123 require.NoError(t, err) 124 125 var retrieved uint64 126 err = db.View(RetrieveLastCompleteBlockHeight(&retrieved)) 127 require.NoError(t, err) 128 129 assert.Equal(t, retrieved, height1) 130 131 height2 := uint64(9999) 132 err = db.Update(InsertLastCompleteBlockHeightIfNotExists(height2)) 133 require.NoError(t, err) 134 135 err = db.View(RetrieveLastCompleteBlockHeight(&retrieved)) 136 require.NoError(t, err) 137 138 assert.Equal(t, retrieved, height1) 139 }) 140 }