-
Notifications
You must be signed in to change notification settings - Fork 196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test(inflation): add additional burn test cases #1828
Conversation
WalkthroughThis update enhances the testing framework for the coin burning functionality, specifically focusing on the verification of state changes through bank total supply queries and handling scenarios with insufficient funds. It introduces comprehensive test cases in both Changes
Assessment against linked issues
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review Status
Actionable comments generated: 1
Configuration used: CodeRabbit UI
Files selected for processing (2)
- x/inflation/keeper/keeper_test.go (1 hunks)
- x/inflation/keeper/msg_server_test.go (1 hunks)
Additional comments: 2
x/inflation/keeper/keeper_test.go (1)
- 23-40: The addition of
mintCoin
andburnCoin
fields in the test struct, along with the new test cases, enhances the coverage of theTestBurn
function. These changes effectively test both successful and failure scenarios, including the critical case of attempting to burn more coins than are available. This aligns well with the PR objectives to improve test coverage around coin burning operations.x/inflation/keeper/msg_server_test.go (1)
- 95-113: The new test function
TestMsgBurn_NotEnoughCoins
is a valuable addition to the test suite, specifically targeting the scenario where there are insufficient funds to perform a burn operation. This test ensures that the system correctly handles such cases by not altering the total supply and returning the appropriate error message. This aligns with the PR objectives to enhance test coverage for error handling in coin burning operations.It's well-structured and follows best practices for testing error conditions. The explicit check for the error message and the unchanged supply amount after the failed operation are particularly noteworthy, as they directly validate the system's behavior in response to the attempted operation.
|
||
// mint and send money to the sender | ||
require.NoError(t, | ||
nibiruApp.BankKeeper.MintCoins( | ||
ctx, types.ModuleName, sdk.NewCoins(tc.burnCoin))) | ||
ctx, types.ModuleName, sdk.NewCoins(tc.mintCoin))) | ||
require.NoError(t, | ||
nibiruApp.BankKeeper.SendCoinsFromModuleToAccount( | ||
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.burnCoin)), | ||
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.mintCoin)), | ||
) | ||
|
||
supply := nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | ||
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | ||
|
||
// Burn coins | ||
err := nibiruApp.InflationKeeper.Burn(ctx, sdk.NewCoins(tc.burnCoin), tc.sender) | ||
supply = nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | ||
if tc.expectedErr != nil { | ||
require.EqualError(t, err, tc.expectedErr.Error()) | ||
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | ||
} else { | ||
require.NoError(t, err) | ||
require.Equal(t, sdk.ZeroInt(), supply.Amount) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for minting coins, sending them to the sender, burning coins, and then checking the supply before and after the burn operation is correctly implemented. However, it's important to ensure that the GetSupply
method accurately reflects changes in the total supply of coins, especially after burning operations. This is crucial for validating the state changes as intended by the PR objectives.
One minor suggestion for improvement is to add comments explaining the purpose of each major step (minting, sending, burning, and verifying) within the test cases. This can enhance readability and maintainability for future contributors.
+ // Mint coins and send them to the sender's account
require.NoError(t,
nibiruApp.BankKeeper.MintCoins(
ctx, types.ModuleName, sdk.NewCoins(tc.mintCoin)))
require.NoError(t,
nibiruApp.BankKeeper.SendCoinsFromModuleToAccount(
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.mintCoin)),
)
+ // Verify the supply matches the minted amount
supply := nibiruApp.BankKeeper.GetSupply(ctx, "unibi")
require.Equal(t, tc.mintCoin.Amount, supply.Amount)
+ // Attempt to burn coins and verify the outcome
err := nibiruApp.InflationKeeper.Burn(ctx, sdk.NewCoins(tc.burnCoin), tc.sender)
supply = nibiruApp.BankKeeper.GetSupply(ctx, "unibi")
if tc.expectedErr != nil {
require.EqualError(t, err, tc.expectedErr.Error())
require.Equal(t, tc.mintCoin.Amount, supply.Amount)
} else {
require.NoError(t, err)
require.Equal(t, sdk.ZeroInt(), supply.Amount)
}
Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.
// mint and send money to the sender | |
require.NoError(t, | |
nibiruApp.BankKeeper.MintCoins( | |
ctx, types.ModuleName, sdk.NewCoins(tc.burnCoin))) | |
ctx, types.ModuleName, sdk.NewCoins(tc.mintCoin))) | |
require.NoError(t, | |
nibiruApp.BankKeeper.SendCoinsFromModuleToAccount( | |
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.burnCoin)), | |
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.mintCoin)), | |
) | |
supply := nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | |
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | |
// Burn coins | |
err := nibiruApp.InflationKeeper.Burn(ctx, sdk.NewCoins(tc.burnCoin), tc.sender) | |
supply = nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | |
if tc.expectedErr != nil { | |
require.EqualError(t, err, tc.expectedErr.Error()) | |
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | |
} else { | |
require.NoError(t, err) | |
require.Equal(t, sdk.ZeroInt(), supply.Amount) | |
// Mint coins and send them to the sender's account | |
require.NoError(t, | |
nibiruApp.BankKeeper.MintCoins( | |
ctx, types.ModuleName, sdk.NewCoins(tc.mintCoin))) | |
require.NoError(t, | |
nibiruApp.BankKeeper.SendCoinsFromModuleToAccount( | |
ctx, types.ModuleName, tc.sender, sdk.NewCoins(tc.mintCoin)), | |
) | |
// Verify the supply matches the minted amount | |
supply := nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | |
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | |
// Attempt to burn coins and verify the outcome | |
err := nibiruApp.InflationKeeper.Burn(ctx, sdk.NewCoins(tc.burnCoin), tc.sender) | |
supply = nibiruApp.BankKeeper.GetSupply(ctx, "unibi") | |
if tc.expectedErr != nil { | |
require.EqualError(t, err, tc.expectedErr.Error()) | |
require.Equal(t, tc.mintCoin.Amount, supply.Amount) | |
} else { | |
require.NoError(t, err) | |
require.Equal(t, sdk.ZeroInt(), supply.Amount) |
* test(inflation): add negative burn tests * test(inflation): add total supply check to burn tests
* chore(perp): remove perp * chore(perp): remove perp protos * chore(stablecoin): remove stablecoin * chore(spot): remove spot * chore: use large ubuntu runner for goreleaser workflow * fix(ledger): bump the hid package to v0.9.2 which fixes ledger on new… (#1649) * fix(ledger): bump the hid package to v0.9.2 which fixes ledger on new macos versions * chore: update changelog * chore: update changelog * feat(wasmbinding)!: whitelisted stargate queries for QueryRequest::Stargate: auth, bank, gov, tokenfactory, epochs, inflation, oracle, sudo, devgas (#1646) * fix(tokenfactory)!: Fix bug in MsgBurn on total supply tracking * chore: rm stablecoin. How does this keep getting merged lol * test: add export statements for the gRPC query service descriptions in each module * feat(wasmbinding): whitelisted stargate queries for QueryRequest::Stargate * changelog * fix changelog * refactor!: make the epoch infos name consistent * docs,test(stargate_query): leave an in-depth explainer above the function * refactor: pR comments: earlier return + remove duplicate hardcoded paths * test: proto package may have more than 3 'parts'. Use len - 1 instead * docs: fix small documentation typos * chore: reset module consensus versions * fix(inflation): enable inflationary NIBI (#1655) * chore(epochs): add day epoch and remove 15min epoch from default genesis * chore(epochs): remove 15min epoch from default genesis * fix(inflation): inflate strategic reserves to sudo root account * fix(inflation): test inflation amounts * chore: update changelog * fix(keeper): inflation keeper instantiation * feat(oracle): edit oracle params msg (#1658) * chore: update changelog * Update CHANGELOG.md * chore(oracle): curate default oracle whitelist (#1659) * chore(oracle): curate default oracle whitelist * update changelog * chore(deps): Bump github.com/CosmWasm/wasmvm from 1.4.1 to 1.5.0 (#1657) Bumps [github.com/CosmWasm/wasmvm](https://github.com/CosmWasm/wasmvm) from 1.4.1 to 1.5.0. - [Release notes](https://github.com/CosmWasm/wasmvm/releases) - [Changelog](https://github.com/CosmWasm/wasmvm/blob/main/CHANGELOG.md) - [Commits](CosmWasm/wasmvm@v1.4.1...v1.5.0) --- updated-dependencies: - dependency-name: github.com/CosmWasm/wasmvm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: Unique-Divine <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Unique Divine <[email protected]> * chore(deps): Bump google.golang.org/grpc from 1.58.3 to 1.59.0 (#1643) * chore(deps): Bump google.golang.org/grpc from 1.58.3 to 1.59.0 Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.58.3 to 1.59.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](grpc/grpc-go@v1.58.3...v1.59.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * Updated changelog - dependabot --------- Signed-off-by: Unique-Divine <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Unique Divine <[email protected]> Co-authored-by: Unique-Divine <[email protected]> Co-authored-by: Unique-Divine <[email protected]> * chore(deps): Bump github.com/cosmos/ibc-go/v7 from 7.3.0 to 7.3.1 (#1647) * chore(oracle): remove bnb:usd from default whitelist * chore(epochs): add month default epoch * chore(wasm): bump wasmd dependency to v0.43.0 (#1660) * chore(wasm): bump wasmd dependency to v0.43.0 * Update CHANGELOG.md * fix: fix linter issues --------- Co-authored-by: Matthias <[email protected]> * fix(epochs): fix epoch tests broken by adding month epoch into default genesis * feat: update wasmd to v0.44.0 (#1666) * feat: update wasmd to v0.44.0 * chore: lint * chore(inflation)!: remove x/inflation module (#1667) * chore(inflation): remove x/inflation and inflation proto files * fix: wasmbinding imports * chore(inflation): remove inflation from app keepers * update changelog * feat(inflation)!: make inflation follow a polynomial distribution (#1670) * feat: make inflation follow a polynomial distribution * chore: changelog * fix: fix inflation test * fix: fix epoch/period confusion * chore: update changelog * feat: add inflation events detailed distribution (#1695) * feat: add inflation events detailed distribution * chore: changelog * fix: improve error handling * fix: broken unit test + make x/sudo safer by making blank genesis invalid * refactor: run gofumpt formatter --------- Co-authored-by: Unique-Divine <[email protected]> * fix(inflation): fix default inflation allocation params (#1688) * fix: fix default inflation allocation * chore: changelog * fix: fix tests --------- Co-authored-by: Unique Divine <[email protected]> * feat: add upgrade handler for inflation module (#1684) * upgrade handler * make lint * update changelog * fix changelog * use orderedModuleNames() function for upgrade --------- Co-authored-by: Unique Divine <[email protected]> * fix: upgrade handler for v1.1.0 (#1706) * fix: upgrade handler for v1.1.0 * chore: update changelog * refactor(inflation): make inflation disabled by default (#1712) * refactor(inflation): make inflation disabled by default * chore: update changelog * chore: bump librocksdb to v8.9.1 (#1778) Co-authored-by: Unique Divine <[email protected]> * chore: update changelog * ci: fix go mod * ci: remove go toolchain directive * feat: make inflation params a collection and add commands to update them (#1776) * feat: make inflation params a collection and add commands to update them * fix: more tests * chore: changelog * Update x/inflation/keeper/grpc_query.go Co-authored-by: Unique Divine <[email protected]> * Update x/inflation/keeper/grpc_query.go Co-authored-by: Unique Divine <[email protected]> * Update x/inflation/keeper/sudo.go Co-authored-by: Unique Divine <[email protected]> * fix: fix tests and improve function * fix: add test for queryserver --------- Co-authored-by: Unique Divine <[email protected]> * ci: bump grocksdb to 1.8.12 * fix: remove verify-dist-temp * ci: use new goreleaser image * ci: update make build commands * fix(inflation): fix first epoch's inflation distribution (#1786) * fix: fix inflation start bug * fix: fix off by 2 on inflation start * fix: make test more random * chore: changelog * fix: use sdkmath.Int instead of sdk.Int * comments + var names --------- Co-authored-by: Unique-Divine <[email protected]> * ci: update goreleaser config file * feat: upgrade handler for v1.0.1 * feat(inflation): add inflation tx cmds (#1795) * feat(inflation): add toggle-inflation cli command * feat(inflation): add edit-params command and update validate-basic * chore: update changelog * feat: uncomment amino registering on register legacy amino codec for inflation module (#1792) * uncomment amino registering on register legacy amino codec * add changelog entry --------- Co-authored-by: Unique-Divine <[email protected]> * feat: handle case where skip epoch not aligned with epoch passed (#1796) * fix(inflation): num skipped epochs tracking (#1797) * fix: fix bug on inflation * chore: changelog * fix: add bool to see wether inflation ever started * fix: epoch off by one error * chore: unwire epochs keeper from inflation keeper * fix: off by one tests --------- Co-authored-by: Kevin Yang <[email protected]> * chore: bump cosmos-sdk to v0.47.9 (#1808) * chore: bump cosmos-sdk to v0.47.9 * chore: update changelog * chore: add v1.0.2 upgrade handler * fix(inflation-docs): ① Document inflation + ② delete unused code + ③ fix CI (#1799) * refactor,docs(inflation): Document everything + delete unused code * changelog * feat(localnet): make perp and spot modules optional features * fix(e2e-wasm.yml-ci): Use consistent command runner * wip! move nibid to path after downlaoding release * wip! fix syntax error in localnet.sh * wip!: what version is running? * wip! try: simplify and use fresh build * wip! fix param space * wip!: fix source path in chaosnet and localnet * wip!: fix source path in chaosnet and localnet * wip!: fix source path in chaosnet and localnet * fix(localent.sh): missing prices in oralce genesis * wait a bit since localnet is fixed now * fix(deploy-wasm): using wrong binary name * ci: Runs well but needs a better name * ci: fix chaosnet build (#1806) * ci: fix chaosnet build * fix(scripts): use better current absolute path directory fn * refactor(e2e-localnet): remove unused script * fix(justfile): handle case where stop is called without anything running --------- Co-authored-by: Unique-Divine <[email protected]> * chore: bump cosmos-sdk to v0.47.9 (#1808) * chore: bump cosmos-sdk to v0.47.9 * chore: update changelog * feat: update default inflation rate (#1804) * feat: update default inflation rate * chore: changelog * fix: fix rounding issue * ci: remove go toolchain in go.mod file * ci: revert back to cosmos sdk v0.47.5 * ci: bump to cosmos-sdk v0.47.6 * ci: bump to cosmos-sdk v0.47.7 * ci: bump to cosmos-sdk v0.47.8 * ci: bump to cosmos-sdk v0.47.9 * ci: revert to cosmos sdk v0.47.5 * chore: bump cosmos-sdk to v0.47.10 * chore: add back v1.0.1 files * fix: add back v1.0.2 upgrade handler * fix: wasm ibc transaction panic (#1816) * fix wasm ibc transaction panic * include upgrade 1.0.3 * linter * update and fix changelog * feat: base64 decoder for cw3 wasm messages (#1731) * wip * feat: have a dirty funny looking solution * chore: changelog * fix: fix replace usage * Update cmd/nibid/cmd/decode_base64.go Co-authored-by: Kevin Yang <[email protected]> * fix: turns out InterfaceRegistry.Resolve does the trick * chore: changelog * fix: remove unused import --------- Co-authored-by: Kevin Yang <[email protected]> * refactor(decode-base64): clean code improvements and fn docs (#1754) * add date into changelog for release * chore: finalize v1.1.0 changelog * feat(inflation): add burn method (#1823) * feat(inflation): add burn method * Update CHANGELOG.md * chore: fix changelog (#1824) * test(inflation): add additional burn test cases (#1828) * test(inflation): add negative burn tests * test(inflation): add total supply check to burn tests * Update CHANGELOG.md * feat(tokenfactory): burn native method (#1832) * refactor: move Burn rpc method to x/tokenfactory * Update tx_msgs.go * feat: add burn native method to tokenfactory msg server * feat: add cli cmd * fix: validate msg * feat: add v1.2.0 upgrade handler * Update CHANGELOG.md * fix: register codec for MsgBurnNative * fix: test --------- Co-authored-by: Unique-Divine <[email protected]> * revert: remove x/inflation burn method * feat(ica): ICA Host / Controller integration (#1820) * ICA Host / Controller integration. Added upgrade constants. Added make format command * Fixed required message URLs * Code import fix * Fixed upgrade name * Fixed upgrade target * Changed version number * Update CHANGELOG.md --------- Co-authored-by: Jonathan Gimeno <[email protected]> Co-authored-by: Kevin Yang <[email protected]> * refactor(oracle): add oracle slashing events (#1859) * refactor(oracle): add oracle slashing events * Update CHANGELOG.md * fix(ica): add controller stack (#1864) * fix(ica): add controller stack * chore: update changelog * fix: linter issues * Update CHANGELOG.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat(wasm)!: increase contract size limit to 3MB (#1906) * feat(wasm): increase contract size limit to 3MB * chore: update changelog * feat: add pebbledb support (#1818) * chore: make default db backend PebbleDB * chore: update changelog * chore: add v1.4.0 upgrade handler * feat(ibc): add wasm stack to ibc router (#1931) * feat(ibc): add wasm stack to ibc router * Update CHANGELOG.md * feat: add v1.5.0 upgrade handler * chore: update changelog * feat: add pebbledb support * chore: remove wasmbinding folder and nibiru/v1 dependency * fix: remove extra overrideWasmVariables * fix: upgrades * fix: oracle keeper * fix: epochs tests * feat: add v2.0.0 upgrade handler * linter * fix: upgrade handlers had wrong function type * Revert "feat: enable wasm light clients on IBC (08-wasm) (#2068)" This reverts commit ee5e29f. * fix: remove v2.1.0 upgrade handler * chore: update changelog for v2 EVM release * fix: revert testnet-1 chain id to 7210 * fix: revert wasmvm to v1.5.0 * feat(ibc): add back 08-wasm client * chore: minor refactors to resemble main branch --------- Signed-off-by: Unique-Divine <[email protected]> Signed-off-by: Unique-Divine <[email protected]> Co-authored-by: Unique Divine <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Unique-Divine <[email protected]> Co-authored-by: Unique-Divine <[email protected]> Co-authored-by: Matthias <[email protected]> Co-authored-by: Matthias <[email protected]> Co-authored-by: Jonathan Gimeno <[email protected]> Co-authored-by: Helder Moreira <[email protected]> Co-authored-by: Segfault <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Oleg Nikonychev <[email protected]>
Purpose / Abstract
Summary by CodeRabbit