CDK FFI Python Tests
This directory contains Python tests for the CDK FFI (Foreign Function Interface) bindings, focusing on wallet database operations.
Running the Tests
Quick Start
The easiest way to run all tests:
# From the repository root
just ffi-test
This command will automatically:
- Build the FFI bindings (if needed)
- Run all Python tests
- Report results
Or run directly (assumes bindings are already built):
# From the repository root
python3 crates/cdk-ffi/tests/test_transactions.py
Prerequisites
Python 3.7+ is required. The just ffi-test command handles everything else automatically.
How It Works
The test script automatically:
- Locates the bindings in
target/bindings/python/
- Copies the shared library from
target/release/ to the bindings directory
- Runs all wallet tests
No manual file copying required!
Test Suite
Wallet Tests (test_transactions.py)
Comprehensive tests for wallet database operations:
- Wallet Creation - Tests creating a wallet with SQLite backend
- Wallet Mint Management - Tests adding and querying mints
- Wallet Keyset Management - Tests adding and querying keysets
- Wallet Keyset Counter - Tests keyset counter increment operations
- Wallet Quote Operations - Tests querying mint and melt quotes
- Wallet Get Proofs by Y Values - Tests retrieving proofs by Y values
Key Features Tested
- ✅ Wallet creation - SQLite backend initialization
- ✅ Mint management - Add, query, and retrieve mint URLs
- ✅ Keyset operations - Add keysets and query by ID or mint
- ✅ Counter operations - Keyset counter increment/read
- ✅ Quote queries - Retrieve mint and melt quotes
- ✅ Proof retrieval - Get proofs by Y values
- ✅ Foreign key constraints - Proper referential integrity
Test Output
Expected output for successful run:
Starting CDK FFI Wallet Tests
==================================================
... (test execution) ...
==================================================
Test Results: 6 passed, 0 failed
==================================================
Troubleshooting
Import Errors
If you see ModuleNotFoundError: No module named 'cdk_ffi':
- Ensure FFI bindings are generated:
just ffi-generate python
- Check that
target/bindings/python/cdk_ffi.py exists
Library Not Found
If you see errors about missing .dylib or .so files:
- Build the release version:
cargo build --release -p cdk-ffi
- Check that the library exists in
target/release/
Test Failures
If tests fail:
- Ensure you're running from the repository root
- Check that the FFI bindings match the current code version
- Try rebuilding:
just ffi-generate python && cargo build --release -p cdk-ffi
Development
When adding new tests:
- Add test function with
async def test_*() signature
- Add test to the
tests list in main()
- Use temporary databases for isolation
- Follow existing patterns for setup/teardown
Implementation Notes
- All tests use temporary SQLite databases
- Each test is fully isolated with its own database
- Tests clean up automatically via
finally blocks
- The script handles path resolution and library loading automatically