github.com/MetalBlockchain/metalgo@v1.11.9/x/archivedb/key_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package archivedb
     5  
     6  import (
     7  	"bytes"
     8  	"slices"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestNaturalDescSortingForSameKey(t *testing.T) {
    15  	key0, _ := newDBKeyFromUser(make([]byte, 0), 0)
    16  	key1, _ := newDBKeyFromUser(make([]byte, 0), 1)
    17  	key2, _ := newDBKeyFromUser(make([]byte, 0), 2)
    18  	key3, _ := newDBKeyFromUser(make([]byte, 0), 3)
    19  
    20  	entry := [][]byte{key0, key1, key2, key3}
    21  	expected := [][]byte{key3, key2, key1, key0}
    22  
    23  	slices.SortFunc(entry, bytes.Compare)
    24  
    25  	require.Equal(t, expected, entry)
    26  }
    27  
    28  func TestSortingDifferentPrefix(t *testing.T) {
    29  	key0, _ := newDBKeyFromUser([]byte{0}, 0)
    30  	key1, _ := newDBKeyFromUser([]byte{0}, 1)
    31  	key2, _ := newDBKeyFromUser([]byte{1}, 0)
    32  	key3, _ := newDBKeyFromUser([]byte{1}, 1)
    33  
    34  	entry := [][]byte{key0, key1, key2, key3}
    35  	expected := [][]byte{key1, key0, key3, key2}
    36  
    37  	slices.SortFunc(entry, bytes.Compare)
    38  
    39  	require.Equal(t, expected, entry)
    40  }
    41  
    42  func TestParseDBKey(t *testing.T) {
    43  	require := require.New(t)
    44  
    45  	key := []byte{0, 1, 2, 3, 4, 5}
    46  	height := uint64(102310)
    47  	dbKey, _ := newDBKeyFromUser(key, height)
    48  
    49  	parsedKey, parsedHeight, err := parseDBKeyFromUser(dbKey)
    50  	require.NoError(err)
    51  	require.Equal(key, parsedKey)
    52  	require.Equal(height, parsedHeight)
    53  }
    54  
    55  func FuzzMetadataKeyInvariant(f *testing.F) {
    56  	f.Fuzz(func(t *testing.T, userKey []byte, metadataKey []byte) {
    57  		// The prefix is independent of the height, so its value doesn't matter
    58  		// for this test.
    59  		_, dbKeyPrefix := newDBKeyFromUser(userKey, 0)
    60  		dbKey := newDBKeyFromMetadata(metadataKey)
    61  		require.False(t, bytes.HasPrefix(dbKey, dbKeyPrefix))
    62  	})
    63  }