mint.rs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. let mnemonic = Mnemonic::generate(12)?;
  41. let wallet_two = Wallet::new(
  42. MINT_URL,
  43. CurrencyUnit::Sat,
  44. Arc::new(WalletMemoryDatabase::default()),
  45. &mnemonic.to_seed_normalized(""),
  46. None,
  47. )?;
  48. let rec = wallet_two
  49. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  50. .await?;
  51. println!("Received: {}", rec);
  52. // Attempt to receive again
  53. if let Err(err) = wallet
  54. .receive(&token.to_string(), SplitTarget::default(), &[], &[])
  55. .await
  56. {
  57. match err {
  58. Error::TokenAlreadySpent => (),
  59. _ => {
  60. bail!("Expected an already spent error");
  61. }
  62. }
  63. }
  64. Ok(())
  65. }