diff --git a/.github/workflows/tests-rs-wallet.yml b/.github/workflows/tests-rs-wallet.yml index fedf4a04aa3..64cc36997d9 100644 --- a/.github/workflows/tests-rs-wallet.yml +++ b/.github/workflows/tests-rs-wallet.yml @@ -196,6 +196,7 @@ jobs: --package platform-wallet-ffi \ --package rs-unified-sdk-ffi \ --package rs-unified-sdk-jni \ + --all-targets \ --all-features \ --locked \ -- --no-deps -D warnings diff --git a/.github/workflows/tests-rs-workspace.yml b/.github/workflows/tests-rs-workspace.yml index d023b5a5117..8883e9dd3ae 100644 --- a/.github/workflows/tests-rs-workspace.yml +++ b/.github/workflows/tests-rs-workspace.yml @@ -176,10 +176,14 @@ jobs: - name: Verify wallet reverse-dependency closure run: python3 .github/scripts/check-wallet-closure.py + # `--all-targets` keeps test/bench/example code in scope. Without it + # clippy only sees the lib/bin targets, so lints in `#[cfg(test)]` code + # merge unnoticed and only surface for whoever runs clippy locally. - name: Clippy lints run: | cargo clippy \ --workspace \ + --all-targets \ --all-features \ --locked \ -- --no-deps -D warnings diff --git a/packages/rs-platform-wallet-ffi/src/core_wallet_types.rs b/packages/rs-platform-wallet-ffi/src/core_wallet_types.rs index 20e5e82ac26..900a5b07e73 100644 --- a/packages/rs-platform-wallet-ffi/src/core_wallet_types.rs +++ b/packages/rs-platform-wallet-ffi/src/core_wallet_types.rs @@ -1982,7 +1982,7 @@ mod tests { "ProRegTx carries a 48-byte operator BLS key" ); assert!( - mn.payout_script.as_ref().map_or(false, |s| !s.is_empty()), + mn.payout_script.as_ref().is_some_and(|s| !s.is_empty()), "ProRegTx carries a payout script" ); assert!( diff --git a/packages/rs-platform-wallet-ffi/src/persistence.rs b/packages/rs-platform-wallet-ffi/src/persistence.rs index 4bed9e757b4..2922e8cc020 100644 --- a/packages/rs-platform-wallet-ffi/src/persistence.rs +++ b/packages/rs-platform-wallet-ffi/src/persistence.rs @@ -5936,33 +5936,41 @@ mod tests { /// callback without its registration callback must not attest pools. #[test] fn partially_wired_persister_attests_only_complete_pairs() { - let mut cb = PersistenceCallbacks::default(); - cb.on_changeset_begin_fn = Some(noop_begin); + let cb = PersistenceCallbacks { + on_changeset_begin_fn: Some(noop_begin), + ..Default::default() + }; assert_eq!( declared_persister(cb, PersistenceCapabilities::ATOMIC_CHANGESETS) .persistence_capabilities(), PersistenceCapabilities::NONE ); - let mut cb = PersistenceCallbacks::default(); - cb.on_changeset_begin_fn = Some(noop_begin); - cb.on_changeset_end_fn = Some(noop_end); + let cb = PersistenceCallbacks { + on_changeset_begin_fn: Some(noop_begin), + on_changeset_end_fn: Some(noop_end), + ..Default::default() + }; let capabilities = declared_persister(cb, PersistenceCapabilities::ATOMIC_CHANGESETS) .persistence_capabilities(); assert_eq!(capabilities, PersistenceCapabilities::ATOMIC_CHANGESETS); assert!(!capabilities.contains(PersistenceCapabilities::INVITATION_CREATION)); - let mut cb = PersistenceCallbacks::default(); let declaration = PersistenceCapabilities::INVITATIONS .union(PersistenceCapabilities::ASSET_LOCK_FUNDING_INDICES); - cb.on_persist_invitations_fn = Some(noop_invitations); - cb.on_persist_account_address_pools_fn = Some(noop_pools); + let cb = PersistenceCallbacks { + on_persist_invitations_fn: Some(noop_invitations), + on_persist_account_address_pools_fn: Some(noop_pools), + ..Default::default() + }; let capabilities = declared_persister(cb, declaration).persistence_capabilities(); assert_eq!(capabilities, PersistenceCapabilities::INVITATIONS); - let mut cb = PersistenceCallbacks::default(); - cb.on_persist_account_registrations_fn = Some(noop_registrations); - cb.on_persist_account_address_pools_fn = Some(noop_pools); + let cb = PersistenceCallbacks { + on_persist_account_registrations_fn: Some(noop_registrations), + on_persist_account_address_pools_fn: Some(noop_pools), + ..Default::default() + }; let capabilities = declared_persister(cb, PersistenceCapabilities::ASSET_LOCK_FUNDING_INDICES) .persistence_capabilities(); @@ -6003,14 +6011,16 @@ mod tests { #[test] fn complete_callbacks_without_declaration_attest_nothing() { - let mut cb = PersistenceCallbacks::default(); - cb.on_changeset_begin_fn = Some(noop_begin); - cb.on_changeset_end_fn = Some(noop_end); - cb.on_persist_invitations_fn = Some(noop_invitations); - cb.on_persist_account_registrations_fn = Some(noop_registrations); - cb.on_persist_account_address_pools_fn = Some(noop_pools); - cb.on_load_wallet_list_fn = Some(noop_load_wallets); - cb.on_load_wallet_list_free_fn = Some(noop_free_wallets); + let cb = PersistenceCallbacks { + on_changeset_begin_fn: Some(noop_begin), + on_changeset_end_fn: Some(noop_end), + on_persist_invitations_fn: Some(noop_invitations), + on_persist_account_registrations_fn: Some(noop_registrations), + on_persist_account_address_pools_fn: Some(noop_pools), + on_load_wallet_list_fn: Some(noop_load_wallets), + on_load_wallet_list_free_fn: Some(noop_free_wallets), + ..Default::default() + }; assert_eq!( FFIPersister::new(cb).persistence_capabilities(), PersistenceCapabilities::NONE @@ -6019,9 +6029,11 @@ mod tests { #[test] fn declaration_is_intersected_with_callback_structure() { - let mut cb = PersistenceCallbacks::default(); - cb.on_changeset_begin_fn = Some(noop_begin); - cb.on_changeset_end_fn = Some(noop_end); + let cb = PersistenceCallbacks { + on_changeset_begin_fn: Some(noop_begin), + on_changeset_end_fn: Some(noop_end), + ..Default::default() + }; assert_eq!( declared_persister(cb, PersistenceCapabilities::INVITATION_CREATION) .persistence_capabilities(), @@ -6274,19 +6286,23 @@ mod tests { #[cfg(feature = "shielded")] #[test] fn shielded_viewing_key_capability_requires_complete_callback_triplet() { - let mut cb = PersistenceCallbacks::default(); - cb.on_persist_shielded_viewing_keys_fn = Some(noop_persist_viewing_keys); - cb.on_load_shielded_viewing_keys_fn = Some(noop_load_viewing_keys); + let cb = PersistenceCallbacks { + on_persist_shielded_viewing_keys_fn: Some(noop_persist_viewing_keys), + on_load_shielded_viewing_keys_fn: Some(noop_load_viewing_keys), + ..Default::default() + }; assert!( !declared_persister(cb, PersistenceCapabilities::SHIELDED_VIEWING_KEYS) .persistence_capabilities() .contains(PersistenceCapabilities::SHIELDED_VIEWING_KEYS) ); - let mut cb = PersistenceCallbacks::default(); - cb.on_persist_shielded_viewing_keys_fn = Some(noop_persist_viewing_keys); - cb.on_load_shielded_viewing_keys_fn = Some(noop_load_viewing_keys); - cb.on_load_shielded_viewing_keys_free_fn = Some(noop_free_viewing_keys); + let cb = PersistenceCallbacks { + on_persist_shielded_viewing_keys_fn: Some(noop_persist_viewing_keys), + on_load_shielded_viewing_keys_fn: Some(noop_load_viewing_keys), + on_load_shielded_viewing_keys_free_fn: Some(noop_free_viewing_keys), + ..Default::default() + }; assert!( declared_persister(cb, PersistenceCapabilities::SHIELDED_VIEWING_KEYS) .persistence_capabilities() @@ -6595,7 +6611,7 @@ mod tests { assert!( restored .highest_generated - .map_or(false, |h| h >= RESTORED_INDEX), + .is_some_and(|h| h >= RESTORED_INDEX), "highest_generated must advance past the pre-derived gap window" ); @@ -6772,7 +6788,7 @@ mod tests { const ECDSA_IDX: u32 = 502; for idx in [BLS_IDX, EDDSA_IDX, ECDSA_IDX] { assert!( - pool.addresses.get(&idx).is_none(), + !pool.addresses.contains_key(&idx), "index {idx} must start with no pre-seeded entry" ); } diff --git a/packages/rs-platform-wallet/src/wallet/asset_lock/sync/recovery.rs b/packages/rs-platform-wallet/src/wallet/asset_lock/sync/recovery.rs index 8d11cde99f6..c0e81a90dbc 100644 --- a/packages/rs-platform-wallet/src/wallet/asset_lock/sync/recovery.rs +++ b/packages/rs-platform-wallet/src/wallet/asset_lock/sync/recovery.rs @@ -582,13 +582,14 @@ mod tests { timed_out, PlatformWalletError::FinalityTimeout(actual) if actual == out_point )); - let broadcast = broadcaster - .transactions - .lock() - .expect("recording broadcaster mutex"); - assert_eq!(broadcast.as_slice(), std::slice::from_ref(&transaction)); - assert_eq!(broadcast[0].txid(), out_point.txid); - drop(broadcast); + { + let broadcast = broadcaster + .transactions + .lock() + .expect("recording broadcaster mutex"); + assert_eq!(broadcast.as_slice(), std::slice::from_ref(&transaction)); + assert_eq!(broadcast[0].txid(), out_point.txid); + } // The real consume path leaves a terminal tombstone. That gives a // same-process retry a truthful typed error, while a foreign outpoint diff --git a/packages/rs-platform-wallet/src/wallet/identity/network/withdrawal.rs b/packages/rs-platform-wallet/src/wallet/identity/network/withdrawal.rs index cc00a6343dd..59f496b1aad 100644 --- a/packages/rs-platform-wallet/src/wallet/identity/network/withdrawal.rs +++ b/packages/rs-platform-wallet/src/wallet/identity/network/withdrawal.rs @@ -232,7 +232,7 @@ mod masternode_withdrawal_tests { fn selects_the_matching_owner_hash160_key_over_decoys() { let owner_hash = [0x11u8; 20]; let other_hash = [0x22u8; 20]; - let keys = vec![ + let keys = [ // Right hash, wrong purpose. make_key( 0, @@ -271,7 +271,7 @@ mod masternode_withdrawal_tests { #[test] fn returns_none_when_no_owner_key_matches() { let owner_hash = [0x11u8; 20]; - let keys = vec![ + let keys = [ make_key( 0, Purpose::TRANSFER, diff --git a/packages/wasm-drive-verify/src/state_transition/verify_state_transition_was_executed_with_proof.rs b/packages/wasm-drive-verify/src/state_transition/verify_state_transition_was_executed_with_proof.rs index 9f2b14cfd54..1597530477b 100644 --- a/packages/wasm-drive-verify/src/state_transition/verify_state_transition_was_executed_with_proof.rs +++ b/packages/wasm-drive-verify/src/state_transition/verify_state_transition_was_executed_with_proof.rs @@ -165,25 +165,6 @@ fn bind_known_contract( Ok((embedded_id, Arc::new(contract))) } -#[cfg(test)] -mod tests { - use super::*; - use dpp::tests::fixtures::get_data_contract_fixture; - - #[test] - fn rejects_known_contract_under_an_alias_identifier() { - let platform_version = PlatformVersion::latest(); - let contract = get_data_contract_fixture(None, 0, platform_version.protocol_version) - .data_contract_owned(); - let alias = Identifier::new([0x5a; 32]); - assert_ne!(alias, contract.id()); - - let error = bind_known_contract(alias, contract).expect_err("alias must be rejected"); - - assert!(error.contains("does not match embedded contract ID")); - } -} - fn convert_proof_result_to_js( proof_result: &StateTransitionProofResult, ) -> Result { @@ -269,3 +250,22 @@ fn convert_proof_result_to_js( Ok(obj.into()) } + +#[cfg(test)] +mod tests { + use super::*; + use dpp::tests::fixtures::get_data_contract_fixture; + + #[test] + fn rejects_known_contract_under_an_alias_identifier() { + let platform_version = PlatformVersion::latest(); + let contract = get_data_contract_fixture(None, 0, platform_version.protocol_version) + .data_contract_owned(); + let alias = Identifier::new([0x5a; 32]); + assert_ne!(alias, contract.id()); + + let error = bind_known_contract(alias, contract).expect_err("alias must be rejected"); + + assert!(error.contains("does not match embedded contract ID")); + } +}