Skip to content

Commit

Permalink
dictionary iteration/migration no longer loads the dictionary type
Browse files Browse the repository at this point in the history
  • Loading branch information
turbolent committed Feb 22, 2024
1 parent c10a6eb commit 8b2476c
Showing 1 changed file with 0 additions and 146 deletions.
146 changes: 0 additions & 146 deletions migrations/migration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import (
"github.com/onflow/cadence/runtime/common"
"github.com/onflow/cadence/runtime/interpreter"
"github.com/onflow/cadence/runtime/stdlib"
"github.com/onflow/cadence/runtime/tests/checker"
. "github.com/onflow/cadence/runtime/tests/runtime_utils"
"github.com/onflow/cadence/runtime/tests/utils"
)
Expand Down Expand Up @@ -948,148 +947,3 @@ func TestContractMigration(t *testing.T) {
value,
)
}

func TestMigrationPanics(t *testing.T) {

t.Parallel()

t.Run("composite dictionary", func(t *testing.T) {
t.Parallel()

ledger := NewTestLedger(nil, nil)
account := common.Address{0x42}

t.Run("prepare", func(t *testing.T) {

fooContractLocation := common.NewAddressLocation(nil, account, "Foo")

storage := runtime.NewStorage(ledger, nil)
locationRange := interpreter.EmptyLocationRange

contractChecker, err := checker.ParseAndCheckWithOptions(t, `
access(all) contract Foo {
access(all) struct Bar {}
}`,
checker.ParseAndCheckOptions{
Location: fooContractLocation,
},
)
require.NoError(t, err)

inter, err := interpreter.NewInterpreter(
nil,
utils.TestLocation,
&interpreter.Config{
Storage: storage,
AtreeValueValidationEnabled: false,
AtreeStorageValidationEnabled: false,
ImportLocationHandler: func(inter *interpreter.Interpreter, location common.Location) interpreter.Import {

This comment has been minimized.

Copy link
@turbolent

turbolent Feb 22, 2024

Author Member

Dictionary iteration is no longer loading the sema type of the dictionary, so the import location handler is no longer called, removing the need for this test.

This comment has been minimized.

Copy link
@SupunS

SupunS Feb 22, 2024

Member

Is this same for arrays as well? If not, maybe update this test to use an array instead

This comment has been minimized.

Copy link
@turbolent

turbolent Feb 22, 2024

Author Member

Arrays already did not load the type before, by iterating using Count() + for-loop with Get for each index/element.

program := interpreter.ProgramFromChecker(contractChecker)
subInterpreter, err := inter.NewSubInterpreter(program, location)
if err != nil {
panic(err)
}

return interpreter.InterpreterImport{
Interpreter: subInterpreter,
}
},
},
)
require.NoError(t, err)

const fooBarQualifiedIdentifier = "Foo.Bar"

dictionaryAnyStructStaticType :=
interpreter.NewDictionaryStaticType(
nil,
interpreter.PrimitiveStaticTypeString,
interpreter.NewCompositeStaticTypeComputeTypeID(
nil,
fooContractLocation,
fooBarQualifiedIdentifier,
),
)

storedValue := interpreter.NewDictionaryValue(
inter,
emptyLocationRange,
dictionaryAnyStructStaticType,
)

transferredValue := storedValue.Transfer(
inter,
locationRange,
atree.Address(account),
false,
nil,
nil,
)

inter.WriteStored(
account,
common.PathDomainStorage.Identifier(),
interpreter.StringStorageMapKey("dictionary_value"),
transferredValue,
)

err = storage.Commit(inter, true)
require.NoError(t, err)
})

t.Run("migrate", func(t *testing.T) {
storage := runtime.NewStorage(ledger, nil)

inter, err := interpreter.NewInterpreter(
nil,
utils.TestLocation,
&interpreter.Config{
Storage: storage,
AtreeValueValidationEnabled: false,
AtreeStorageValidationEnabled: false,
ImportLocationHandler: func(_ *interpreter.Interpreter, _ common.Location) interpreter.Import {
// During the migration, treat the imported `Foo` contract as un-migrated.
panic(errors.New("type checking error in Foo"))
},
},
)
require.NoError(t, err)

migration := NewStorageMigration(inter, storage)

reporter := newTestReporter()

migration.Migrate(
&AddressSliceIterator{
Addresses: []common.Address{
account,
},
},
migration.NewValueMigrationsPathMigrator(
reporter,
testStringMigration{},
testInt8Migration{},
testCapMigration{},
),
)

err = migration.Commit()
require.NoError(t, err)

expectedErrors := map[struct {
interpreter.StorageKey
interpreter.StorageMapKey
}][]string{
{
StorageKey: interpreter.StorageKey{
Key: common.PathDomainStorage.Identifier(),
Address: account,
},
StorageMapKey: interpreter.StringStorageMapKey("dictionary_value"),
}: {"StorageMigration"},
}

assert.Equal(t, expectedErrors, reporter.errored)
})
})
}

0 comments on commit 8b2476c

Please sign in to comment.