Skip to content

Commit

Permalink
Merge pull request #484 from onflow/fxamacker/avoid-accessing-SlabID-…
Browse files Browse the repository at this point in the history
…fields-in-tests

Avoid using unexported `SlabID` fields in tests
  • Loading branch information
fxamacker authored Jan 28, 2025
2 parents fc5a825 + 331eea6 commit 310c9cd
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 50 deletions.
10 changes: 6 additions & 4 deletions array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5675,6 +5675,7 @@ func TestArrayLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload random composite value", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const arraySize = 500
Expand Down Expand Up @@ -5712,6 +5713,7 @@ func TestArrayLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload random data slab", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const arraySize = 500
Expand Down Expand Up @@ -5778,6 +5780,7 @@ func TestArrayLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload random slab", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const arraySize = 500
Expand Down Expand Up @@ -6108,11 +6111,10 @@ func TestArrayID(t *testing.T) {
array, err := NewArray(storage, address, typeInfo)
require.NoError(t, err)

sid := array.SlabID()
id := array.ValueID()
slabID := array.SlabID()
valueID := array.ValueID()

require.Equal(t, sid.address[:], id[:SlabAddressLength])
require.Equal(t, sid.index[:], id[SlabAddressLength:])
testEqualValueIDAndSlabID(t, slabID, valueID)
}

func TestSlabSizeWhenResettingMutableStorable(t *testing.T) {
Expand Down
16 changes: 9 additions & 7 deletions map_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15053,7 +15053,7 @@ func TestMapLoadedValueIterator(t *testing.T) {
sort.Slice(externalCollisionSlabIDs, func(i, j int) bool {
a := externalCollisionSlabIDs[i]
b := externalCollisionSlabIDs[j]
if a.address == b.address {
if a.Address() == b.Address() {
return a.IndexAsUint64() < b.IndexAsUint64()
}
return a.AddressAsUint64() < b.AddressAsUint64()
Expand Down Expand Up @@ -15254,7 +15254,7 @@ func TestMapLoadedValueIterator(t *testing.T) {
sort.Slice(externalCollisionSlabIDs, func(i, j int) bool {
a := externalCollisionSlabIDs[i]
b := externalCollisionSlabIDs[j]
if a.address == b.address {
if a.Address() == b.Address() {
return a.IndexAsUint64() < b.IndexAsUint64()
}
return a.AddressAsUint64() < b.AddressAsUint64()
Expand Down Expand Up @@ -15470,7 +15470,7 @@ func TestMapLoadedValueIterator(t *testing.T) {
sort.Slice(externalCollisionSlabIDs, func(i, j int) bool {
a := externalCollisionSlabIDs[i]
b := externalCollisionSlabIDs[j]
if a.address == b.address {
if a.Address() == b.Address() {
return a.IndexAsUint64() < b.IndexAsUint64()
}
return a.AddressAsUint64() < b.AddressAsUint64()
Expand Down Expand Up @@ -15985,6 +15985,7 @@ func TestMapLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload composite value at random index", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const mapSize = 500
Expand Down Expand Up @@ -16028,6 +16029,7 @@ func TestMapLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload random data slab", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const mapSize = 500
Expand Down Expand Up @@ -16109,6 +16111,7 @@ func TestMapLoadedValueIterator(t *testing.T) {

runTest("root metadata slab with composite values, unload random slab", func(useWrapperValue bool) func(t *testing.T) {
return func(t *testing.T) {

storage := newTestPersistentStorage(t)

const mapSize = 500
Expand Down Expand Up @@ -16643,11 +16646,10 @@ func TestMapID(t *testing.T) {
m, err := NewMap(storage, address, NewDefaultDigesterBuilder(), typeInfo)
require.NoError(t, err)

sid := m.SlabID()
id := m.ValueID()
slabID := m.SlabID()
valueID := m.ValueID()

require.Equal(t, sid.address[:], id[:SlabAddressLength])
require.Equal(t, sid.index[:], id[SlabAddressLength:])
testEqualValueIDAndSlabID(t, slabID, valueID)
}

func TestSlabSizeWhenResettingMutableStorableInMap(t *testing.T) {
Expand Down
58 changes: 27 additions & 31 deletions storage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -292,9 +292,8 @@ func TestLedgerBaseStorageStore(t *testing.T) {
if owner == nil {
break
}
var id SlabID
copy(id.address[:], owner)
copy(id.index[:], key[1:])

id := NewSlabIDFromRawAddressAndIndex(owner, key[1:])

require.True(t, LedgerKeyIsSlabKey(string(key)))
require.Equal(t, values[id], value)
Expand Down Expand Up @@ -364,7 +363,7 @@ func TestLedgerBaseStorageRemove(t *testing.T) {
require.NoError(t, err)

// Remove non-existent value
err = baseStorage.Remove(NewSlabID(id.address, id.index.Next()))
err = baseStorage.Remove(NewSlabID(id.Address(), id.Index().Next()))
require.NoError(t, err)

// Retrieve removed value
Expand All @@ -381,9 +380,6 @@ func TestLedgerBaseStorageRemove(t *testing.T) {
if owner == nil {
break
}
var id SlabID
copy(id.address[:], owner)
copy(id.index[:], key[1:])

require.True(t, LedgerKeyIsSlabKey(string(key)))
require.Nil(t, value)
Expand All @@ -402,18 +398,18 @@ func TestLedgerBaseStorageGenerateSlabID(t *testing.T) {

id, err := baseStorage.GenerateSlabID(address1)
require.NoError(t, err)
require.Equal(t, address1, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address1, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())

id, err = baseStorage.GenerateSlabID(address1)
require.NoError(t, err)
require.Equal(t, address1, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.index)
require.Equal(t, address1, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.Index())

id, err = baseStorage.GenerateSlabID(address2)
require.NoError(t, err)
require.Equal(t, address2, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address2, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())
}

func TestBasicSlabStorageStore(t *testing.T) {
Expand Down Expand Up @@ -504,7 +500,7 @@ func TestBasicSlabStorageRemove(t *testing.T) {
require.NoError(t, err)

// Remove non-existent value
err = storage.Remove(NewSlabID(id.address, id.index.Next()))
err = storage.Remove(NewSlabID(id.Address(), id.Index().Next()))
require.NoError(t, err)

// Retrieve removed value
Expand All @@ -524,28 +520,28 @@ func TestBasicSlabStorageGenerateSlabID(t *testing.T) {

id, err := storage.GenerateSlabID(address1)
require.NoError(t, err)
require.Equal(t, address1, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address1, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())

id, err = storage.GenerateSlabID(address1)
require.NoError(t, err)
require.Equal(t, address1, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.index)
require.Equal(t, address1, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.Index())

id, err = storage.GenerateSlabID(address2)
require.NoError(t, err)
require.Equal(t, address2, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address2, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())
}

func TestBasicSlabStorageSlabIDs(t *testing.T) {
r := newRand(t)
address := Address{1}
index := SlabIndex{0, 0, 0, 0, 0, 0, 0, 0}
wantIDs := map[SlabID]bool{
{address: address, index: index.Next()}: true,
{address: address, index: index.Next()}: true,
{address: address, index: index.Next()}: true,
NewSlabID(address, index.Next()): true,
NewSlabID(address, index.Next()): true,
NewSlabID(address, index.Next()): true,
}

storage := NewBasicSlabStorage(nil, nil, nil, nil)
Expand Down Expand Up @@ -1195,26 +1191,26 @@ func TestPersistentStorageGenerateSlabID(t *testing.T) {

id, err := storage.GenerateSlabID(address)
require.NoError(t, err)
require.Equal(t, address, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())

id, err = storage.GenerateSlabID(address)
require.NoError(t, err)
require.Equal(t, address, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.index)
require.Equal(t, address, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.Index())
})
t.Run("perm address", func(t *testing.T) {
address := Address{1}

id, err := storage.GenerateSlabID(address)
require.NoError(t, err)
require.Equal(t, address, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.index)
require.Equal(t, address, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 1}, id.Index())

id, err = storage.GenerateSlabID(address)
require.NoError(t, err)
require.Equal(t, address, id.address)
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.index)
require.Equal(t, address, id.Address())
require.Equal(t, SlabIndex{0, 0, 0, 0, 0, 0, 0, 2}, id.Index())
})
}

Expand Down
33 changes: 25 additions & 8 deletions utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,10 +402,10 @@ func mapEqual(t *testing.T, expected mapValue, actual *OrderedMap) {
}

func valueIDToSlabID(vid ValueID) SlabID {
var id SlabID
copy(id.address[:], vid[:SlabAddressLength])
copy(id.index[:], vid[SlabAddressLength:])
return id
return NewSlabIDFromRawAddressAndIndex(
vid[:SlabAddressLength],
vid[SlabAddressLength:],
)
}

func testInlinedMapIDs(t *testing.T, address Address, m *OrderedMap) {
Expand All @@ -424,11 +424,10 @@ func testInlinedSlabIDAndValueID(t *testing.T, expectedAddress Address, slabID S
}

func testNotInlinedSlabIDAndValueID(t *testing.T, expectedAddress Address, slabID SlabID, valueID ValueID) {
require.Equal(t, expectedAddress, slabID.address)
require.NotEqual(t, SlabIndexUndefined, slabID.index)
require.Equal(t, expectedAddress, slabID.Address())
require.NotEqual(t, SlabIndexUndefined, slabID.Index())

require.Equal(t, slabID.address[:], valueID[:SlabAddressLength])
require.Equal(t, slabID.index[:], valueID[SlabAddressLength:])
testEqualValueIDAndSlabID(t, slabID, valueID)
}

type arrayValue []Value
Expand Down Expand Up @@ -464,3 +463,21 @@ func GetDeltasCount(storage *PersistentSlabStorage) int {
func GetCacheCount(storage *PersistentSlabStorage) int {
return len(GetCache(storage))
}

func NewSlabIDFromRawAddressAndIndex(rawAddress, rawIndex []byte) SlabID {
var address Address
copy(address[:], rawAddress)

var index SlabIndex
copy(index[:], rawIndex)

return NewSlabID(address, index)
}

func testEqualValueIDAndSlabID(t *testing.T, slabID SlabID, valueID ValueID) {
sidAddress := slabID.Address()
sidIndex := slabID.Index()

require.Equal(t, sidAddress[:], valueID[:SlabAddressLength])
require.Equal(t, sidIndex[:], valueID[SlabAddressLength:])
}

0 comments on commit 310c9cd

Please sign in to comment.