Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the 📝 WalkthroughWalkthroughThis PR introduces a new integration test validating end-to-end compression of restricted Token-2022 mints. A dev dependency on anchor-spl is added to support test infrastructure. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Fix all issues with AI Agents
In @forester/tests/test_restricted_mint_compression.rs:
- Around line 439-449: The assertions use redundant Pubkey::from() conversions
on compressed_account.token_data.mint and .owner which are already Pubkey types;
remove the Pubkey::from(...) wrappers and compare the Pubkey values directly
(e.g., assert_eq!(compressed_account.token_data.mint, mint.pubkey(), ...) and
assert_eq!(compressed_account.token_data.owner, owner_keypair.pubkey(), ...)) to
eliminate the lint failures.
- Around line 46-48: Extract the duplicated async helper function
register_forester (used in test_restricted_mint_compression.rs and
test_compressible_ctoken.rs) into a shared test utilities module (e.g.,
tests/common/mod.rs or tests/util.rs), move its definition there, export it
(pub) and update both test files to import and call the shared register_forester
instead of their local copies; ensure any type bounds (R: Rpc) and supporting
imports are also moved or re-exported so the tests compile without further
changes.
- Around line 32-35: The test imports the deprecated
solana_sdk::system_instruction; replace that import with the dedicated interface
crate by importing system_instruction from solana_system_interface (e.g., change
the use statement referencing system_instruction to use
solana_system_interface::system_instruction) and add solana-system-interface = {
workspace = true } to [dev-dependencies] in Cargo.toml so tests compile against
the new interface crate.
- Around line 377-397: The compressor task is being aborted which swallows
errors; replace the final compressor_handle.abort() with awaiting the task
result and handling outcomes from the JoinHandle returned by tokio::spawn: await
compressor_handle, inspect Ok(result) and call result.expect or propagate its
Err from Compressor::compress_batch, treat a cancelled JoinHandle as the timeout
case, and panic/log if the JoinHandle reports a panic so test failures surface
(refer to Compressor::new, compressor_handle, and compress_batch to locate the
code).
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lockand included by none
📒 Files selected for processing (2)
forester/Cargo.tomlforester/tests/test_restricted_mint_compression.rs
🧰 Additional context used
📓 Path-based instructions (3)
forester/**/*.rs
📄 CodeRabbit inference engine (forester/README.md)
forester/**/*.rs: When running tests locally, the test will automatically spawn a local validator and start a local prover service using predefined URLs (localhost:8899 for RPC, localhost:8784 for indexer)
Automatically skip minting tokens, executing transactions, and root verification for disabled test types
Files:
forester/tests/test_restricted_mint_compression.rs
**/*test*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
**/*test*.rs: When testing account state, use borsh deserialization with a single assert_eq against an expected reference account
Use type-safe assertions with actual struct fields instead of magic byte offsets when testing account data
Test assertions should deserialize account data using borsh before validation
Extract runtime-specific values from deserialized accounts before building expected reference state
Files:
forester/tests/test_restricted_mint_compression.rs
forester/**/*test*.rs
📄 CodeRabbit inference engine (CLAUDE.md)
Run forester end-to-end tests with 'TEST_MODE=local cargo test --package forester e2e_test -- --nocapture'
Files:
forester/tests/test_restricted_mint_compression.rs
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run compressed token core tests using `cargo test-sbf -p compressed-token-test --test ctoken`, `--test v1`, `--test mint`, and `--test transfer2`
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run E2E extended tests after building the small compressed token program using `pnpm --filter lightprotocol/programs run build-compressed-token-small` followed by `cargo test-sbf -p e2e-test -- --test test_10_all`
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: sdk-tests/CLAUDE.md:0-0
Timestamp: 2025-12-07T03:17:52.872Z
Learning: Applies to sdk-tests/sdk-anchor-test/package.json : Maintain TypeScript integration test scripts in package.json with commands for "build" and "test-ts" targeting Anchor SDK tests
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/README.md:0-0
Timestamp: 2025-11-24T17:54:38.537Z
Learning: Implement compressed token program interfaces for third-party token creation and usage on Solana using ZK Compression
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: Compressed token accounts must support compression to spl tokens and decompression back, with spl tokens serving as decompressed representations
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/anchor/README.md:0-0
Timestamp: 2025-11-24T17:54:33.614Z
Learning: Implement the Compressed Token Program interface for creating and using compressed tokens on Solana with ZK Compression
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run account-compression tests using `cargo test-sbf -p account-compression-test` to test core account compression program (Merkle tree management)
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: The program is a compressed token implementation similar to spl-token that supports both compressed token accounts (TokenData) and decompressed ctoken solana accounts (CompressedToken) with compatible account layouts
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run Light system program compression tests using `cargo test-sbf -p system-test -- test_with_compression` and `cargo test-sbf -p system-test --test test_re_init_cpi_account` to test compressed account operations
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: js/compressed-token/README.md:0-0
Timestamp: 2025-11-24T17:53:57.540Z
Learning: This is the JavaScript SDK for interacting with the Compressed Token program on Solana
📚 Learning: 2025-12-07T03:17:28.803Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: sdk-tests/sdk-ctoken-test/README.md:0-0
Timestamp: 2025-12-07T03:17:28.803Z
Learning: Applies to sdk-tests/sdk-ctoken-test/**/Cargo.toml : Use path references in Cargo.toml dependencies pointing to `/Users/ananas/dev/light-protocol2/sdk-libs/` for light-ctoken-sdk, light-ctoken-types, light-sdk, light-sdk-types, and light-program-test
Applied to files:
forester/Cargo.toml
📚 Learning: 2026-01-05T19:53:20.702Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: Applies to programs/compressed-token/program/program-libs/ctoken-interface/src/state/ctoken/**/*.rs : CToken account layout must match SPL token account layout, with a custom extension named Compressible for rent management
Applied to files:
forester/Cargo.tomlforester/tests/test_restricted_mint_compression.rs
📚 Learning: 2026-01-05T19:53:36.706Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/docs/instructions/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:36.706Z
Learning: Applies to programs/compressed-token/program/docs/instructions/instructions/compressed_token/**/*.md : Anchor program instructions for compressed token accounts must be documented separately in instructions/compressed_token/ directory and should include operations like Freeze and Thaw
Applied to files:
forester/Cargo.toml
📚 Learning: 2026-01-05T19:53:36.706Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/docs/instructions/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:36.706Z
Learning: Program instructions should be organized into logical categories: Account Creation, Transfer Operations, Mint Management, Token Account Operations, and Anchor Program Instructions (compressed token)
Applied to files:
forester/Cargo.toml
📚 Learning: 2025-11-24T18:01:30.012Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run compressed token core tests using `cargo test-sbf -p compressed-token-test --test ctoken`, `--test v1`, `--test mint`, and `--test transfer2`
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-11-24T18:01:30.012Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run account-compression tests using `cargo test-sbf -p account-compression-test` to test core account compression program (Merkle tree management)
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-11-24T18:01:30.012Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-tests/CLAUDE.md:0-0
Timestamp: 2025-11-24T18:01:30.012Z
Learning: Run Light system program compression tests using `cargo test-sbf -p system-test -- test_with_compression` and `cargo test-sbf -p system-test --test test_re_init_cpi_account` to test compressed account operations
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-12-19T12:31:15.409Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: forester/README.md:0-0
Timestamp: 2025-12-19T12:31:15.409Z
Learning: Applies to forester/**/*.rs : Automatically skip minting tokens, executing transactions, and root verification for disabled test types
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2026-01-05T19:53:20.702Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: Applies to programs/compressed-token/program/program-libs/ctoken-interface/src/state/mint/**/*.rs : Compressed mint accounts (cmints) must support exactly one extension: TokenMetadata
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-11-24T17:55:17.323Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: sdk-libs/macros/src/compressible/README.md:0-0
Timestamp: 2025-11-24T17:55:17.323Z
Learning: Applies to sdk-libs/macros/src/compressible/**/decompress_context.rs : Decompression trait implementation (`DecompressContext`) with account accessors, PDA/token separation logic, and token processing delegation should be in `decompress_context.rs`
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2026-01-05T19:53:20.702Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: Applies to programs/compressed-token/program/src/**/*.rs : Rent top-up calculations for compressible accounts must use utilities from `src/shared/compressible_top_up.rs`
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-12-19T12:31:15.409Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: forester/README.md:0-0
Timestamp: 2025-12-19T12:31:15.409Z
Learning: Use `forester status --full` for comprehensive status checks including compressed token program tests
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-12-06T00:49:57.458Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: sdk-tests/sdk-token-test/CLAUDE.md:0-0
Timestamp: 2025-12-06T00:49:57.458Z
Learning: Applies to sdk-tests/sdk-token-test/**/*test.rs : Tests should use light-ctoken-sdk functions from sdk-libs/compressed-token-sdk for testing ctoken instructions
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2026-01-05T19:54:29.700Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-05T19:54:29.700Z
Learning: Applies to forester/**/*test*.rs : Run forester end-to-end tests with 'TEST_MODE=local cargo test --package forester e2e_test -- --nocapture'
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-11-24T18:00:48.449Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-libs/compressible/docs/SOLANA_RENT.md:0-0
Timestamp: 2025-11-24T18:00:48.449Z
Learning: Applies to program-libs/compressible/docs/**/*.rs : Account closure must distribute lamports according to: Solana rent exemption → returned to user, completed epoch rent → rent recipient, partial epoch rent → user, compression incentive → forester node
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2026-01-05T19:53:20.702Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: programs/compressed-token/program/CLAUDE.md:0-0
Timestamp: 2026-01-05T19:53:20.702Z
Learning: Applies to programs/compressed-token/program/src/transfer2/compression/**/*.rs : Rent authority can only compress accounts when `is_compressible()` returns true
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-11-24T18:00:48.449Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-libs/compressible/docs/SOLANA_RENT.md:0-0
Timestamp: 2025-11-24T18:00:48.449Z
Learning: Applies to program-libs/compressible/docs/**/*.rs : Implement account compressibility states in the following order: Funded (rent for current + 1 epoch) → Compressible (lacks rent for current + 1 epoch) → Claimable (funded but past epochs unclaimed)
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-12-06T00:49:21.983Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: program-libs/compressible/CLAUDE.md:0-0
Timestamp: 2025-12-06T00:49:21.983Z
Learning: Applies to program-libs/compressible/src/config.rs : CompressibleConfig account structure must support serialization via Anchor, Pinocchio, and Borsh formats for Light Registry program integration
Applied to files:
forester/tests/test_restricted_mint_compression.rs
📚 Learning: 2025-12-07T03:17:28.803Z
Learnt from: CR
Repo: Lightprotocol/light-protocol PR: 0
File: sdk-tests/sdk-ctoken-test/README.md:0-0
Timestamp: 2025-12-07T03:17:28.803Z
Learning: Use compressible token account extensions that allow accounts to be compressed back into compressed state with rent payment mechanisms
Applied to files:
forester/tests/test_restricted_mint_compression.rs
🪛 GitHub Actions: forester-tests
forester/tests/test_restricted_mint_compression.rs
[error] 33-33: use of deprecated module solana_sdk::system_instruction. Use solana_system_interface crate instead
🪛 GitHub Actions: lint
forester/tests/test_restricted_mint_compression.rs
[error] 33-33: use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
🪛 GitHub Check: Forester e2e test
forester/tests/test_restricted_mint_compression.rs
[failure] 33-33:
use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
🪛 GitHub Check: lint
forester/tests/test_restricted_mint_compression.rs
[failure] 446-446:
useless conversion to the same type: solana_sdk::entrypoint::__Pubkey
[failure] 441-441:
useless conversion to the same type: solana_sdk::entrypoint::__Pubkey
[failure] 33-33:
use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Test batched-merkle-tree-simulate
- GitHub Check: stateless-js-v2
🔇 Additional comments (7)
forester/Cargo.toml (1)
70-70: LGTM!Clean addition of
anchor-splas a dev-dependency for the new Token-2022 integration test. Usingworkspace = truekeeps version management consistent with the rest of the project.forester/tests/test_restricted_mint_compression.rs (6)
39-44: LGTM!Clean encapsulation of forester registration context. The struct nicely bundles the keypair, RPC pool, and epoch state needed for compression testing.
170-177: Using placeholder PDAs — verify these aren't needed downstream.The
epoch_pdaandforester_epoch_pdaare set toPubkey::default(), andmerkle_treesis empty. This works for this test since these fields aren't used by theCompressor, but could cause subtle bugs if the test evolves to use them.
201-212: Test queries indexer (line 417-431) but starts validator withenable_indexer: false.The validator is configured with
enable_indexer: false, yet the test later callsget_compressed_token_accounts_by_owneron the indexer. Given the docstring mentions this is a reproducer for a Photon indexer parsing issue, I suspect the external indexer is expected to be running separately, but this could cause the test to fail unexpectedly if the indexer isn't available.Consider adding a comment clarifying the indexer setup or adding a skip condition when no external indexer is present.
258-301: LGTM!Correct Token-2022 mint setup: account creation → extension initialization → mint initialization. The order matters here since extensions must be initialized before the mint, and you've got it right.
318-353: LGTM!Clean setup of the compressible token account with
num_prepaid_epochs: 0for immediate compression eligibility. The verification that the tracker captured the account is thorough, checking pubkey, mint, and owner.
457-468: LGTM!Clean shutdown sequence: signal broadcast followed by awaiting both subscriber tasks. This ensures resources are properly cleaned up before the test exits.
| use solana_sdk::{ | ||
| pubkey::Pubkey, signature::Keypair, signer::Signer, system_instruction, | ||
| transaction::Transaction, | ||
| }; |
There was a problem hiding this comment.
Use solana_system_interface instead of deprecated solana_sdk::system_instruction.
The pipeline is failing because solana_sdk::system_instruction is deprecated. The Solana ecosystem has moved these types to dedicated interface crates.
🔎 Proposed fix
use solana_sdk::{
- pubkey::Pubkey, signature::Keypair, signer::Signer, system_instruction,
- transaction::Transaction,
+ pubkey::Pubkey, signature::Keypair, signer::Signer, transaction::Transaction,
};
+use solana_system_interface::instruction as system_instruction;You'll also need to add solana-system-interface to [dev-dependencies] in Cargo.toml:
solana-system-interface = { workspace = true }📝 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. Thoroughly test & benchmark the code to ensure it meets the requirements.
| use solana_sdk::{ | |
| pubkey::Pubkey, signature::Keypair, signer::Signer, system_instruction, | |
| transaction::Transaction, | |
| }; | |
| use solana_sdk::{ | |
| pubkey::Pubkey, signature::Keypair, signer::Signer, transaction::Transaction, | |
| }; | |
| use solana_system_interface::instruction as system_instruction; |
🧰 Tools
🪛 GitHub Actions: forester-tests
[error] 33-33: use of deprecated module solana_sdk::system_instruction. Use solana_system_interface crate instead
🪛 GitHub Actions: lint
[error] 33-33: use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
🪛 GitHub Check: Forester e2e test
[failure] 33-33:
use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
🪛 GitHub Check: lint
[failure] 33-33:
use of deprecated module solana_sdk::system_instruction: Use solana_system_interface crate instead
🤖 Prompt for AI Agents
In @forester/tests/test_restricted_mint_compression.rs around lines 32 - 35, The
test imports the deprecated solana_sdk::system_instruction; replace that import
with the dedicated interface crate by importing system_instruction from
solana_system_interface (e.g., change the use statement referencing
system_instruction to use solana_system_interface::system_instruction) and add
solana-system-interface = { workspace = true } to [dev-dependencies] in
Cargo.toml so tests compile against the new interface crate.
| /// Register a forester for epoch 0 and wait for registration phase to complete | ||
| /// (Reused from test_compressible_ctoken.rs) | ||
| async fn register_forester<R: Rpc>( |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider extracting this helper to a shared test utility module.
The comment notes this is "reused from test_compressible_ctoken.rs". Having duplicate registration logic across test files creates maintenance burden — when the registration flow changes, multiple files need updates. Consider extracting to a shared module (e.g., tests/common/mod.rs or a test utilities crate).
🤖 Prompt for AI Agents
In @forester/tests/test_restricted_mint_compression.rs around lines 46 - 48,
Extract the duplicated async helper function register_forester (used in
test_restricted_mint_compression.rs and test_compressible_ctoken.rs) into a
shared test utilities module (e.g., tests/common/mod.rs or tests/util.rs), move
its definition there, export it (pub) and update both test files to import and
call the shared register_forester instead of their local copies; ensure any type
bounds (R: Rpc) and supporting imports are also moved or re-exported so the
tests compile without further changes.
| let compressor = Compressor::new(ctx.rpc_pool.clone(), tracker.clone(), ctx.forester_keypair); | ||
| let compressor_handle = tokio::spawn(async move { | ||
| compressor | ||
| .compress_batch(&ready_accounts, registered_forester_pda) | ||
| .await | ||
| }); | ||
| sleep(Duration::from_millis(2000)).await; | ||
|
|
||
| // 9. Wait for account to be closed on-chain | ||
| let start = tokio::time::Instant::now(); | ||
| let timeout = Duration::from_secs(30); | ||
| let mut account_closed = false; | ||
| while start.elapsed() < timeout { | ||
| let account = rpc_from_pool.get_account(ctoken_pubkey).await.unwrap(); | ||
| if account.is_none() || account.as_ref().map(|a| a.lamports) == Some(0) { | ||
| account_closed = true; | ||
| break; | ||
| } | ||
| sleep(Duration::from_millis(500)).await; | ||
| } | ||
| compressor_handle.abort(); |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider awaiting the compressor task result instead of aborting.
Aborting the task with abort() silently discards any errors or panics that occurred. For a reproducer test, it would be valuable to see if the compressor encountered issues:
// Instead of abort, check the result
match compressor_handle.await {
Ok(result) => result.expect("Compression failed"),
Err(e) if e.is_cancelled() => { /* timeout, ok */ }
Err(e) => panic!("Compressor task panicked: {}", e),
}That said, for a quick reproducer this is fine as-is.
🤖 Prompt for AI Agents
In @forester/tests/test_restricted_mint_compression.rs around lines 377 - 397,
The compressor task is being aborted which swallows errors; replace the final
compressor_handle.abort() with awaiting the task result and handling outcomes
from the JoinHandle returned by tokio::spawn: await compressor_handle, inspect
Ok(result) and call result.expect or propagate its Err from
Compressor::compress_batch, treat a cancelled JoinHandle as the timeout case,
and panic/log if the JoinHandle reports a panic so test failures surface (refer
to Compressor::new, compressor_handle, and compress_batch to locate the code).
| let compressed_account = &compressed_accounts[0]; | ||
| assert_eq!( | ||
| Pubkey::from(compressed_account.token_data.mint), | ||
| mint.pubkey(), | ||
| "Compressed account mint should match" | ||
| ); | ||
| assert_eq!( | ||
| Pubkey::from(compressed_account.token_data.owner), | ||
| owner_keypair.pubkey(), | ||
| "Compressed account owner should match" | ||
| ); |
There was a problem hiding this comment.
Remove redundant Pubkey::from() conversions — these are causing lint failures.
The compressed_account.token_data.mint and .owner are already Pubkey types, so the conversion is unnecessary.
🔎 Proposed fix
let compressed_account = &compressed_accounts[0];
assert_eq!(
- Pubkey::from(compressed_account.token_data.mint),
+ compressed_account.token_data.mint,
mint.pubkey(),
"Compressed account mint should match"
);
assert_eq!(
- Pubkey::from(compressed_account.token_data.owner),
+ compressed_account.token_data.owner,
owner_keypair.pubkey(),
"Compressed account owner should match"
);🧰 Tools
🪛 GitHub Check: lint
[failure] 446-446:
useless conversion to the same type: solana_sdk::entrypoint::__Pubkey
[failure] 441-441:
useless conversion to the same type: solana_sdk::entrypoint::__Pubkey
🤖 Prompt for AI Agents
In @forester/tests/test_restricted_mint_compression.rs around lines 439 - 449,
The assertions use redundant Pubkey::from() conversions on
compressed_account.token_data.mint and .owner which are already Pubkey types;
remove the Pubkey::from(...) wrappers and compare the Pubkey values directly
(e.g., assert_eq!(compressed_account.token_data.mint, mint.pubkey(), ...) and
assert_eq!(compressed_account.token_data.owner, owner_keypair.pubkey(), ...)) to
eliminate the lint failures.
Summary by CodeRabbit
Tests
Chores
✏️ Tip: You can customize this high-level summary in your review settings.