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  }