Because of the nature of Rust tests, the nutshell integration test has a race
condition. Triggering the issue in the local environment was hard, but it
happens more often in #509 because all the keys are read from memory without
blocking the database.
The error happens because, by default, Rust tests run in parallel, and maybe by
design or by mistake, the external wallet did not increase its counter until
the completion of the minting. This led to some tests having the same blinded
messages, and the fastest test would mint successfully. The slowest test would
result in the CDK failing to sign duplicated blinded messages.
In any case, the fix is on the rust side, running the tests sequentially.
Add a strict set of updates to prevent incorrect state changes and correct
usage. Supporting the transaction at the trait level prevented some cases, but
having a strict set of state change flows is better.
This bug was found while developing the signatory. The keys are read from
memory, triggering race conditions at the database, and some `Pending` states
are selected (instead of just selecting `Unspent`).
This PR also introduces a set of generic database tests to be executed for all
database implementations, this test suite will make sure writing and
maintaining new database drivers
* fix: grpc set mint urls
* refactor: Extract payment processor retrieval into helper method
* fix: only allow updates to nut04/05 where there is a backend
* feat: Add GetQuoteTtl RPC method to retrieve quote TTL settings
* fix: update long desctiption
* feat: Add created_time and paid_time fields to MintQuote struct
* feat: Add serde default of 0 for created_time in MintQuote
* feat: Add created_time and paid_time to MintQuote and MeltQuote structs
* feat: Add paid_time update when setting melt quote state to Paid
* fix: Update melt quote state with current Unix timestamp
* feat: Add paid_time update for mint quote when state is set to Paid
* feat: Add issued_time field to MintQuote conversion from SQLite row
* feat: Add issued_time tracking for MintQuoteState::Issued state
* feat: Add migration script for mint time of quotes
* feat: Add timestamp columns to mint_quote and melt_quote tables
* feat: Add timestamp columns to `add_mint_quote` method
* refactor: Improve code formatting and readability in mint quote state update logic
* feat: Add created_time and paid_time columns to melt_quote query
* feat: time on mint and melt quotes
* feat: Add migration script for mint created time signature
feat: Add created_time column to blind_signature table
feat: Add created_time to blind_signature insertion
feat: Add created_time column to proof table and update insert query
feat: time on mint and melt quotes
* feat: Add new table to track blind signature creation time
* feat: Add timestamp tracking for proofs in ReDB database
* feat: redb proof time
* chore: fmt
The bug comes with the SQLx-sqlite pool bug, where several connections are
created by default, but the `new` function takes care of that, fixing that bug
by making a single instance of the database.
If constructed directly, the pool would create several connections to the
database, which in most instances is fine, but with SQLite :memory: each
connection is entirely independent.
Also follow documentation to make sure that failed `acquire` will not end up
dropping connections by setting test_before_acquire to false
However, if your workload is sensitive to dropped connections such as using an in-memory
SQLite database with a pool size of 1, you can pretty easily ensure that a cancelled
`acquire()` call will never drop connections by tweaking your [`PoolOptions`]:
* Set [`test_before_acquire(false)`][PoolOptions::test_before_acquire]
* Never set [`before_acquire`][PoolOptions::before_acquire] or
[`after_connect`][PoolOptions::after_connect].
* chore: Add nutshell wallet integration test script
feat: Add MINT_URL configuration for docker container in nutshell wallet integration test script
chore: Make nutshell_wallet_itest.sh executable
fix: Update MINT_URL to use host.docker.internal for Docker container access
feat: Add Docker container startup for Cashu daemon in wallet integration test script
chore: Update Docker image to use Docker Hub repository
feat: Add cleanup trap to stop Docker container and unset variables
feat: Add initial test stub for nutshell wallet mint functionality
test: Add Cashu wallet mint integration test
feat: Add just command for nutshell wallet integration test
refactor: Organize imports and improve code formatting in nutshell wallet test
fix: Update Cashu Docker image and test URL for correct container access
fix: Update Docker container name and image for Cashu wallet test script
fix: Handle Docker container name conflict in nutshell wallet integration test
fix: Update Docker image to cashubtc/nutshell:latest in wallet integration test script
feat: Add support for running separate Nutshell mint and wallet containers
feat: Update Nutshell mint and wallet container configurations for integration testing
fix: Update wallet port and container configuration in integration test script
chore: Export MINT_URL and WALLET_URL as environment variables
fix: Update invoice creation and state checking in nutshell wallet test
fix: Update MINT_URL to use host.docker.internal for container access
fix: Update nutshell wallet mint test to handle invoice payment state
refactor: Improve Nutshell wallet test with better error handling and robustness
refactor: Improve code formatting and logging in nutshell wallet test
refactor: Replace anyhow with expect for error handling in Nutshell wallet test
refactor: Simplify error handling in Nutshell wallet mint test
refactor: Replace `?` with `expect()` in Nutshell wallet test
refactor: Simplify nutshell wallet test by removing unused code and improving error handling
refactor: Extract minting and balance helper functions in nutshell wallet test
feat: Add test for Nutshell wallet token swap functionality
fix: Trim quotes from token in nutshell wallet swap test
refactor: Remove debug print statements and improve code readability
refactor: Improve test_nutshell_wallet_melt with payment state checking and balance verification
refactor: Update Nutshell wallet integration test script configuration
feat: Extract common mint startup function into shared script
refactor: Simplify nutshell wallet integration test script and improve startup process
feat: Add mintd process termination and test status capture in integration test script
refactor: Capitalize env vars and ensure comprehensive cleanup in trap
feat: nutshell wallet test
* ci: Add test step for Nutshell wallet integration tests
* ci: Split Nutshell integration tests into separate jobs
* feat: nutshell wallet test
* ci: Add Docker setup and increase timeout for Nutshell wallet integration tests
* chore: Improve Nutshell wallet integration test script robustness
* fix: Remove -i flag from Nix develop and improve Docker accessibility check
* fix: payment processor
* fix: wallet tests
* feat: Add integration shell with Docker and Rust stable for testing
* ci: Simplify Nutshell wallet integration test workflow and script
* fix: Improve mintd endpoint detection and error handling in integration test script
* fix: wallet tests