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 }