mint.rs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //! Mint tests
  2. //!
  3. //! This file contains tests that focus on the mint's internal functionality without client interaction.
  4. //! These tests verify the mint's behavior in isolation, such as keyset management, database operations,
  5. //! and other mint-specific functionality that doesn't require wallet clients.
  6. use std::collections::{HashMap, HashSet};
  7. use std::sync::Arc;
  8. use anyhow::Result;
  9. use bip39::Mnemonic;
  10. use cdk::cdk_database::MintDatabase;
  11. use cdk::mint::{MintBuilder, MintMeltLimits};
  12. use cdk::nuts::{CurrencyUnit, PaymentMethod};
  13. use cdk::types::{FeeReserve, QuoteTTL};
  14. use cdk_fake_wallet::FakeWallet;
  15. use cdk_sqlite::mint::memory;
  16. pub const MINT_URL: &str = "http://127.0.0.1:8088";
  17. #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  18. async fn test_correct_keyset() -> Result<()> {
  19. let mnemonic = Mnemonic::generate(12)?;
  20. let fee_reserve = FeeReserve {
  21. min_fee_reserve: 1.into(),
  22. percent_fee_reserve: 1.0,
  23. };
  24. let database = memory::empty().await.expect("valid db instance");
  25. let fake_wallet = FakeWallet::new(fee_reserve, HashMap::default(), HashSet::default(), 0);
  26. let mut mint_builder = MintBuilder::new();
  27. let localstore = Arc::new(database);
  28. mint_builder = mint_builder.with_localstore(localstore.clone());
  29. mint_builder = mint_builder
  30. .add_ln_backend(
  31. CurrencyUnit::Sat,
  32. PaymentMethod::Bolt11,
  33. MintMeltLimits::new(1, 5_000),
  34. Arc::new(fake_wallet),
  35. )
  36. .await?;
  37. mint_builder = mint_builder
  38. .with_name("regtest mint".to_string())
  39. .with_description("regtest mint".to_string())
  40. .with_seed(mnemonic.to_seed_normalized("").to_vec());
  41. let mint = mint_builder.build().await?;
  42. localstore
  43. .set_mint_info(mint_builder.mint_info.clone())
  44. .await?;
  45. let quote_ttl = QuoteTTL::new(10000, 10000);
  46. localstore.set_quote_ttl(quote_ttl).await?;
  47. mint.rotate_next_keyset(CurrencyUnit::Sat, 32, 0).await?;
  48. mint.rotate_next_keyset(CurrencyUnit::Sat, 32, 0).await?;
  49. let active = mint.localstore.get_active_keysets().await?;
  50. let active = active
  51. .get(&CurrencyUnit::Sat)
  52. .expect("There is a keyset for unit");
  53. let keyset_info = mint
  54. .localstore
  55. .get_keyset_info(active)
  56. .await?
  57. .expect("There is keyset");
  58. assert!(keyset_info.derivation_path_index == Some(2));
  59. let mint = mint_builder.build().await?;
  60. let active = mint.localstore.get_active_keysets().await?;
  61. let active = active
  62. .get(&CurrencyUnit::Sat)
  63. .expect("There is a keyset for unit");
  64. let keyset_info = mint
  65. .localstore
  66. .get_keyset_info(active)
  67. .await?
  68. .expect("There is keyset");
  69. assert!(keyset_info.derivation_path_index == Some(2));
  70. Ok(())
  71. }