This document summarizes the comprehensive test suite built for SubLua, following the architecture defined in architecture.md.
File: test/test_crypto.lua
Comprehensive tests for the C crypto module covering:
- Blake2b: Empty string, known values, different output lengths (16/32/64 bytes), long inputs, error handling
- Twox128/Twox64: Deterministic hashing, storage key prefixes ("System", "Account")
- Ed25519: Keypair generation from seeds, signing, verification, error cases (wrong message/signature/pubkey), long messages
- SS58: Encode/decode roundtrip, different versions (0, 2, 42), Polkadot/Kusama addresses, error handling
File: test/test_scale.lua
Complete coverage of SCALE encoding/decoding:
- Compact Integers: Single byte (0-63), two bytes (64-16383), four bytes (16384-1073741823), bigint mode (>=1073741824)
- Fixed-size Integers: u8, u16, u32, u64, u128 with little-endian encoding
- Option Type: None (nil) and Some(value) encoding
- Vector Type: Empty, single element, multiple elements with different encoders
- Real-world Patterns: Account nonce (u32), balance (Compact), call index (u16+u16)
File: test/test_keyring.lua
Key management and signing:
- Seed Handling: Hex strings (with/without 0x), raw bytes, deterministic generation
- SS58 Address: Generation, validation, consistency
- Signing: Message signing, verification, different messages, empty/long messages
- URI Parsing: //Alice support, error handling for unsupported URIs
- Edge Cases: All zeros, all 0xFF, public key matching C module
File: test/test_transaction.lua
Transaction construction and signing:
- Basic Creation: Signed extrinsic creation with various parameters
- Nonce Handling: Different nonces produce different signatures
- Call Encoding: Different calls produce different signatures
- Signer Verification: Different signers produce different signatures
- Extrinsic Structure: V4 format, version byte (0x84), address encoding (MultiAddress::Id)
- Era Encoding: Immortal era (0x00)
- Payload Hashing: Long calls (>256 bytes) are hashed before signing
- Deterministic Signing: Same inputs produce same signatures
- Chain State Dependencies: Genesis hash and block hash affect signatures
File: test/test_rpc.lua
RPC client unit tests:
- Client Creation: HTTP/HTTPS/WSS/WS URL handling
- Chain Properties: Default properties, caching
- Storage Key Construction: System.Account key format
- Method Signatures: All RPC methods exist and are callable
- Parameter Handling: Optional parameters (block hash, block number)
- Error Handling: Structure and error cases
File: test/test_integration.lua
End-to-end workflows:
- Local Integration: Module loading, keyring roundtrip, signing flow, storage key construction
- Network Integration: RPC connection, finalized head, genesis hash, runtime version, chain properties, account queries, full transaction flow
Note: Network tests can be skipped with SKIP_NETWORK_TESTS=1 for CI/CD environments without network access.
- Total Unit Tests: 103 tests
- Total Integration Tests: 12 tests (7 local, 5 network)
- Test Files: 7 files
- Coverage: All components from architecture.md are tested
make test # Run all tests
make test-crypto # Run crypto tests only
SKIP_NETWORK_TESTS=1 make test # Skip network-dependent testscd test
lua test_crypto.lua # 26 tests
lua test_scale.lua # 25 tests
lua test_keyring.lua # 17 tests
lua test_transaction.lua # 17 tests
lua test_rpc.lua # 18 tests
lua test_integration.lua # 12 tests (5 require network)All tests follow the architecture principles:
- Pure C & Lua: Tests verify C module (
polkadot_crypto.so) and Lua layer separately - Standard Lua Support: Tests work with standard Lua (5.1-5.4) - no LuaJIT FFI dependencies
- Hybrid Implementation: Tests cover both C module (crypto) and Lua layer (RPC, SCALE, transactions)
- Zero FFI: Tests use standard Lua C API via
require()
- ✅ Comprehensive: All major functionality is tested
- ✅ Edge Cases: Error handling, boundary conditions, invalid inputs
- ✅ Deterministic: Tests verify deterministic behavior (signing, hashing)
- ✅ Isolated: Unit tests don't require network access
- ✅ CI/CD Ready: Tests return proper exit codes, network tests can be skipped
Potential areas for additional testing:
- Performance benchmarks
- Fuzzing for SCALE codec
- More network integration scenarios
- Cross-chain compatibility tests
- Memory leak detection (for C module)
When adding new features:
- Add tests to the appropriate test file
- Follow the existing test structure
- Ensure all tests pass:
make test - Update this document if adding new test categories