mint.rs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. //!
  7. //! Test Categories:
  8. //! - Keyset rotation and management
  9. //! - Database transaction handling
  10. //! - Internal state transitions
  11. //! - Fee calculation and enforcement
  12. //! - Proof validation and state management
  13. use std::collections::{HashMap, HashSet};
  14. use std::sync::Arc;
  15. use bip39::Mnemonic;
  16. use cdk::cdk_database::MintDatabase;
  17. use cdk::mint::{MintBuilder, MintMeltLimits};
  18. use cdk::nuts::{CurrencyUnit, PaymentMethod};
  19. use cdk::types::{FeeReserve, QuoteTTL};
  20. use cdk_fake_wallet::FakeWallet;
  21. use cdk_sqlite::mint::memory;
  22. pub const MINT_URL: &str = "http://127.0.0.1:8088";
  23. #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  24. async fn test_correct_keyset() {
  25. let mnemonic = Mnemonic::generate(12).unwrap();
  26. let fee_reserve = FeeReserve {
  27. min_fee_reserve: 1.into(),
  28. percent_fee_reserve: 1.0,
  29. };
  30. let database = memory::empty().await.expect("valid db instance");
  31. let fake_wallet = FakeWallet::new(
  32. fee_reserve,
  33. HashMap::default(),
  34. HashSet::default(),
  35. 0,
  36. CurrencyUnit::Sat,
  37. );
  38. let localstore = Arc::new(database);
  39. let mut mint_builder = MintBuilder::new(localstore.clone());
  40. mint_builder = mint_builder
  41. .with_name("regtest mint".to_string())
  42. .with_description("regtest mint".to_string());
  43. mint_builder
  44. .add_payment_processor(
  45. CurrencyUnit::Sat,
  46. PaymentMethod::Bolt11,
  47. MintMeltLimits::new(1, 5_000),
  48. Arc::new(fake_wallet),
  49. )
  50. .await
  51. .unwrap();
  52. // .with_seed(mnemonic.to_seed_normalized("").to_vec());
  53. let mint = mint_builder
  54. .build_with_seed(localstore.clone(), &mnemonic.to_seed_normalized(""))
  55. .await
  56. .unwrap();
  57. let mut tx = localstore.begin_transaction().await.unwrap();
  58. let quote_ttl = QuoteTTL::new(10000, 10000);
  59. tx.set_quote_ttl(quote_ttl).await.unwrap();
  60. tx.commit().await.unwrap();
  61. let active = mint.get_active_keysets();
  62. let active = active
  63. .get(&CurrencyUnit::Sat)
  64. .expect("There is a keyset for unit");
  65. let old_keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  66. mint.rotate_keyset(CurrencyUnit::Sat, 32, 0).await.unwrap();
  67. let active = mint.get_active_keysets();
  68. let active = active
  69. .get(&CurrencyUnit::Sat)
  70. .expect("There is a keyset for unit");
  71. let keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  72. assert_ne!(keyset_info.id, old_keyset_info.id);
  73. mint.rotate_keyset(CurrencyUnit::Sat, 32, 0).await.unwrap();
  74. let active = mint.get_active_keysets();
  75. let active = active
  76. .get(&CurrencyUnit::Sat)
  77. .expect("There is a keyset for unit");
  78. let new_keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  79. assert_ne!(new_keyset_info.id, keyset_info.id);
  80. }