C 6e4ec9116f Add Python wallet test suite with CI integration (#1362) 1 ماه پیش
..
README.md 6e4ec9116f Add Python wallet test suite with CI integration (#1362) 1 ماه پیش
test_transactions.py 6e4ec9116f Add Python wallet test suite with CI integration (#1362) 1 ماه پیش

README.md

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:

  1. Build the FFI bindings (if needed)
  2. Run all Python tests
  3. 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:

  1. Locates the bindings in target/bindings/python/
  2. Copies the shared library from target/release/ to the bindings directory
  3. Runs all wallet tests

No manual file copying required!

Test Suite

Wallet Tests (test_transactions.py)

Comprehensive tests for wallet database operations:

  1. Wallet Creation - Tests creating a wallet with SQLite backend
  2. Wallet Mint Management - Tests adding and querying mints
  3. Wallet Keyset Management - Tests adding and querying keysets
  4. Wallet Keyset Counter - Tests keyset counter increment operations
  5. Wallet Quote Operations - Tests querying mint and melt quotes
  6. 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:

  1. Add test function with async def test_*() signature
  2. Add test to the tests list in main()
  3. Use temporary databases for isolation
  4. 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