Skip to content

Commit

Permalink
Merge pull request #2193 from onflow/robert/add-test-for-storage-capa…
Browse files Browse the repository at this point in the history
…city

Test storage capacity update on FLOW transfer
  • Loading branch information
robert-e-davidson3 authored Sep 3, 2022
2 parents 9f2fbd1 + de3ea5f commit 6341272
Showing 1 changed file with 91 additions and 0 deletions.
91 changes: 91 additions & 0 deletions fvm/fvm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1594,6 +1594,97 @@ func TestEnforcingComputationLimit(t *testing.T) {
}
}

func TestStorageCapacity(t *testing.T) {
t.Run("Storage capacity updates on FLOW transfer", newVMTest().
withContextOptions(
fvm.WithTransactionProcessors(fvm.NewTransactionInvoker()),
fvm.WithCadenceLogging(true),
).
withBootstrapProcedureOptions(
fvm.WithStorageMBPerFLOW(10_0000_0000),
fvm.WithAccountCreationFee(fvm.DefaultAccountCreationFee),
).
run(func(
t *testing.T,
vm *fvm.VirtualMachine,
chain flow.Chain,
ctx fvm.Context,
view state.View,
programs *programs.Programs,
) {
service := chain.ServiceAddress()
signer := createAccount(t, vm, chain, ctx, view, programs)
target := createAccount(t, vm, chain, ctx, view, programs)

// Transfer FLOW from service account to test accounts

transferTxBody := transferTokensTx(chain).
AddAuthorizer(service).
AddArgument(jsoncdc.MustEncode(cadence.UFix64(1_000_000))).
AddArgument(jsoncdc.MustEncode(cadence.NewAddress(signer))).
SetProposalKey(service, 0, 0).
SetPayer(service)
tx := fvm.Transaction(transferTxBody, 0)
err := vm.Run(ctx, tx, view, programs)
require.NoError(t, err)
require.NoError(t, tx.Err)

transferTxBody = transferTokensTx(chain).
AddAuthorizer(service).
AddArgument(jsoncdc.MustEncode(cadence.UFix64(1_000_000))).
AddArgument(jsoncdc.MustEncode(cadence.NewAddress(target))).
SetProposalKey(service, 0, 0).
SetPayer(service)
tx = fvm.Transaction(transferTxBody, 0)
err = vm.Run(ctx, tx, view, programs)
require.NoError(t, err)
require.NoError(t, tx.Err)

// Perform test

txBody := flow.NewTransactionBody().
SetScript([]byte(fmt.Sprintf(`
import FungibleToken from 0x%s
import FlowToken from 0x%s
transaction(target: Address) {
prepare(signer: AuthAccount) {
let receiverRef = getAccount(target)
.getCapability(/public/flowTokenReceiver)
.borrow<&{FungibleToken.Receiver}>()
?? panic("Could not borrow receiver reference to the recipient''s Vault")
let vaultRef = signer
.borrow<&{FungibleToken.Provider}>(from: /storage/flowTokenVault)
?? panic("Could not borrow reference to the owner''s Vault!")
var cap0: UInt64 = signer.storageCapacity
receiverRef.deposit(from: <- vaultRef.withdraw(amount: 0.0000001))
var cap1: UInt64 = signer.storageCapacity
log(cap0 - cap1)
}
}`,
fvm.FungibleTokenAddress(chain),
fvm.FlowTokenAddress(chain),
))).
AddArgument(jsoncdc.MustEncode(cadence.NewAddress(target))).
AddAuthorizer(signer)

tx = fvm.Transaction(txBody, 0)

err = vm.Run(ctx, tx, view, programs)
require.NoError(t, err)
require.NoError(t, tx.Err)

require.Len(t, tx.Logs, 1)
assert.Equal(t, tx.Logs[0], "1")
}),
)
}

func TestScriptContractMutationsFailure(t *testing.T) {
t.Parallel()

Expand Down

0 comments on commit 6341272

Please sign in to comment.