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  }