Skip to content

Commit

Permalink
test(callbacks): checking that processCallback consumes gas (#4381)
Browse files Browse the repository at this point in the history
* imp(callbacks_test): checking that processCallback consumes gas from callback execution

* imp(callbacks_test): simplified success test case a bit
  • Loading branch information
srdtrk authored Aug 21, 2023
1 parent b7cb1eb commit 48a7baf
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions modules/apps/callbacks/ibc_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,7 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
callbackData types.CallbackData
ctx sdk.Context
callbackExecutor func(sdk.Context) error
expGasConsumed uint64
)

callbackError := fmt.Errorf("callbackExecutor error")
Expand All @@ -761,6 +762,7 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
"success: callbackExecutor panic, but not out of gas",
func() {
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(expGasConsumed, "callbackExecutor gas consumption")
panic("callbackExecutor panic")
}
},
Expand All @@ -771,8 +773,9 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
"success: callbackExecutor oog panic, but retry is not allowed",
func() {
executionGas := callbackData.ExecutionGasLimit
expGasConsumed = executionGas
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(executionGas+1, "callbackExecutor oog panic")
cachedCtx.GasMeter().ConsumeGas(expGasConsumed+1, "callbackExecutor gas consumption")
return nil
}
},
Expand All @@ -783,6 +786,7 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
"failure: callbackExecutor error",
func() {
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(expGasConsumed, "callbackExecutor gas consumption")
return callbackError
}
},
Expand All @@ -794,6 +798,7 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
func() {
callbackType = types.CallbackTypeSendPacket
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(expGasConsumed, "callbackExecutor gas consumption")
panic("callbackExecutor panic")
}
},
Expand All @@ -805,6 +810,7 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
func() {
executionGas := callbackData.ExecutionGasLimit
callbackData.CommitGasLimit = executionGas + 1
expGasConsumed = executionGas
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(executionGas+1, "callbackExecutor oog panic")
return nil
Expand All @@ -823,18 +829,22 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
// set a callback data that does not allow retry
callbackData = types.CallbackData{
CallbackAddress: s.chainB.SenderAccount.GetAddress().String(),
ExecutionGasLimit: 1000000,
ExecutionGasLimit: 1_000_000,
SenderAddress: s.chainB.SenderAccount.GetAddress().String(),
CommitGasLimit: 600000,
CommitGasLimit: 600_000,
}

// this only makes a difference if it is SendPacket
callbackType = types.CallbackTypeReceivePacket

// expGasConsumed can be overwritten in malleate
expGasConsumed = 300_000

ctx = s.chainB.GetContext()

// set a callback executor that will always succeed
// set a callback executor that will always succeed after consuming expGasConsumed
callbackExecutor = func(cachedCtx sdk.Context) error {
cachedCtx.GasMeter().ConsumeGas(expGasConsumed, "callbackExecutor gas consumption")
return nil
}

Expand Down Expand Up @@ -862,6 +872,8 @@ func (s *CallbacksTestSuite) TestProcessCallback() {
processCallback()
s.Require().ErrorIs(tc.expValue.(error), err)
}

s.Require().Equal(expGasConsumed, ctx.GasMeter().GasConsumed())
})
}
}
Expand Down

0 comments on commit 48a7baf

Please sign in to comment.