github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/migration_block_slot_index_test.go (about) 1 package kv 2 3 import ( 4 "testing" 5 6 "github.com/prysmaticlabs/prysm/shared/bytesutil" 7 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 8 "go.etcd.io/bbolt" 9 ) 10 11 func Test_migrateBlockSlotIndex(t *testing.T) { 12 tests := []struct { 13 name string 14 setup func(t *testing.T, db *bbolt.DB) 15 eval func(t *testing.T, db *bbolt.DB) 16 }{ 17 { 18 name: "only runs once", 19 setup: func(t *testing.T, db *bbolt.DB) { 20 err := db.Update(func(tx *bbolt.Tx) error { 21 if err := tx.Bucket(blockSlotIndicesBucket).Put([]byte("2048"), []byte("foo")); err != nil { 22 return err 23 } 24 return tx.Bucket(migrationsBucket).Put(migrationBlockSlotIndex0Key, migrationCompleted) 25 }) 26 assert.NoError(t, err) 27 }, 28 eval: func(t *testing.T, db *bbolt.DB) { 29 err := db.View(func(tx *bbolt.Tx) error { 30 v := tx.Bucket(blockSlotIndicesBucket).Get([]byte("2048")) 31 assert.DeepEqual(t, []byte("foo"), v, "Did not receive correct data for key 2048") 32 return nil 33 }) 34 assert.NoError(t, err) 35 }, 36 }, 37 { 38 name: "migrates and deletes entries", 39 setup: func(t *testing.T, db *bbolt.DB) { 40 err := db.Update(func(tx *bbolt.Tx) error { 41 return tx.Bucket(blockSlotIndicesBucket).Put([]byte("2048"), []byte("foo")) 42 }) 43 assert.NoError(t, err) 44 }, 45 eval: func(t *testing.T, db *bbolt.DB) { 46 err := db.View(func(tx *bbolt.Tx) error { 47 k := uint64(2048) 48 v := tx.Bucket(blockSlotIndicesBucket).Get(bytesutil.Uint64ToBytesBigEndian(k)) 49 assert.DeepEqual(t, []byte("foo"), v, "Did not receive correct data for key %d", k) 50 return nil 51 }) 52 assert.NoError(t, err) 53 }, 54 }, 55 } 56 for _, tt := range tests { 57 t.Run(tt.name, func(t *testing.T) { 58 db := setupDB(t).db 59 tt.setup(t, db) 60 assert.NoError(t, db.Update(migrateBlockSlotIndex), "migrateBlockSlotIndex(tx) error") 61 tt.eval(t, db) 62 }) 63 } 64 }