mint.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //! Mint integration tests
  2. use std::sync::Arc;
  3. use std::time::Duration;
  4. use anyhow::{bail, Result};
  5. use bip39::Mnemonic;
  6. use cdk::amount::SplitTarget;
  7. use cdk::cdk_database::WalletMemoryDatabase;
  8. use cdk::nuts::CurrencyUnit;
  9. use cdk::wallet::error::Error;
  10. use cdk::wallet::SendKind;
  11. use cdk::Wallet;
  12. use cdk_integration_tests::{create_backends_fake_wallet, start_mint, wallet_mint, MINT_URL};
  13. #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  14. pub async fn test_mint_double_receive() -> Result<()> {
  15. tokio::spawn(async move {
  16. let ln_backends = create_backends_fake_wallet();
  17. start_mint(ln_backends).await.expect("Could not start mint")
  18. });
  19. tokio::time::sleep(Duration::from_millis(500)).await;
  20. let mnemonic = Mnemonic::generate(12)?;
  21. let wallet = Wallet::new(
  22. MINT_URL,
  23. CurrencyUnit::Sat,
  24. Arc::new(WalletMemoryDatabase::default()),
  25. &mnemonic.to_seed_normalized(""),
  26. None,
  27. )?;
  28. let wallet = Arc::new(wallet);
  29. wallet_mint(Arc::clone(&wallet), 100.into()).await?;
  30. let token = wallet
  31. .send(
  32. 10.into(),
  33. None,
  34. None,
  35. &SplitTarget::default(),
  36. &SendKind::default(),
  37. false,
  38. )
  39. .await
  40. .unwrap();
  41. let mnemonic = Mnemonic::generate(12)?;
  42. let wallet_two = Wallet::new(
  43. MINT_URL,
  44. CurrencyUnit::Sat,
  45. Arc::new(WalletMemoryDatabase::default()),
  46. &mnemonic.to_seed_normalized(""),
  47. None,
  48. )?;
  49. let rec = wallet_two
  50. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  51. .await?;
  52. println!("Received: {}", rec);
  53. // Attempt to receive again
  54. if let Err(err) = wallet
  55. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  56. .await
  57. {
  58. match err {
  59. Error::TokenAlreadySpent => (),
  60. _ => {
  61. bail!("Expected an already spent error");
  62. }
  63. }
  64. }
  65. Ok(())
  66. }