This document explains the testing architecture for the Fabtoken implementation in Panurus.
Related Documentation:
- Running Benchmarks - How to run performance benchmarks
The Fabtoken tests are organized in a layered architecture that mirrors the code abstraction levels. Each layer represents a different level of the software stack - from core operations to high-level service APIs.
Each layer represents a different code abstraction level.
┌─────────────────────────────────────────────────────────────────┐
│ Layer 3: Service Layer (Highest Abstraction) │
├─────────────────────────────────────────────────────────────────┤
│ Transfer Generation Service │
│ Location: token/core/fabtoken/v1/ │
│ Tests: - BenchmarkTransferServiceTransfer │
│ - TestParallelBenchmarkTransferServiceTransfer │
│ Purpose: End-to-end transfer operation generation with vault, │
│ audit, and metadata handling │
├─────────────────────────────────────────────────────────────────┤
│ Issue Generation Service │
│ Location: token/core/fabtoken/v1/ │
│ Tests: - BenchmarkIssueServiceIssue │
│ - TestParallelBenchmarkIssueServiceIssue │
│ Purpose: End-to-end issue operation generation through high-level│
│ service API │
├─────────────────────────────────────────────────────────────────┤
│ Auditor Check Service │
│ Location: token/core/fabtoken/v1/ │
│ Tests: - BenchmarkAuditorServiceCheck │
│ - TestParallelBenchmarkAuditorServiceCheck │
│ Purpose: End-to-end audit verification through high-level │
│ service API │
├─────────────────────────────────────────────────────────────────┤
│ Transfer/Issue Validator Service │
│ Location: token/core/fabtoken/v1/validator/ │
│ Tests: - BenchmarkValidatorTransfer │
│ - TestParallelBenchmarkValidatorTransfer │
│ - BenchmarkValidatorIssue │
│ - TestParallelBenchmarkValidatorIssue │
│ Purpose: Token request validation with signatures, business │
│ logic, and format verification │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Layer 2: Action Operations │
├─────────────────────────────────────────────────────────────────┤
│ Transfer Generation (token/core/fabtoken/v1/) │
│ Tests: - BenchmarkSender │
│ - BenchmarkParallelSender │
│ - TestParallelBenchmarkSender │
│ Purpose: Transfer action generation and serialization │
├─────────────────────────────────────────────────────────────────┤
│ Transfer Verification (token/core/fabtoken/v1/) │
│ Tests: - BenchmarkVerificationSenderProof │
│ - BenchmarkVerificationParallelSenderProof │
│ - TestParallelBenchmarkVerificationSenderProof │
│ Purpose: Deserialization and format validation of transfer │
│ actions │
├─────────────────────────────────────────────────────────────────┤
│ Issue Generation (token/core/fabtoken/v1/) │
│ Tests: - BenchmarkIssuer │
│ Purpose: Issue action generation and serialization │
├─────────────────────────────────────────────────────────────────┤
│ Issue Verification (token/core/fabtoken/v1/) │
│ Tests: - BenchmarkProofVerificationIssuer │
│ Purpose: Deserialization and verification of issue actions │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Layer 1: Core Operations (Lowest Abstraction) │
│ Location: token/core/fabtoken/v1/ │
│ Tests: - BenchmarkTransferProofGeneration │
│ - TestParallelBenchmarkTransferProofGeneration │
│ Purpose: Pure transfer action structure generation and │
│ serialization │
└─────────────────────────────────────────────────────────────────┘
Location: token/core/fabtoken/v1/
BenchmarkTransferProofGenerationTestParallelBenchmarkTransferProofGenerationPure transfer action generation and serialization. In Fabtoken, since there are no complex zero-knowledge proofs, this layer focuses on the core action structure creation.
cd token/core/fabtoken/v1
go test -bench=BenchmarkTransferProofGeneration -benchtime=10s
go test -run=TestParallelBenchmarkTransferProofGeneration -v
Location: token/core/fabtoken/v1/
BenchmarkSenderBenchmarkParallelSenderTestParallelBenchmarkSenderComplete transfer action creation from inputs to serialized output.
cd token/core/fabtoken/v1
go test -bench=BenchmarkSender -benchtime=10s
go test -bench=BenchmarkParallelSender -benchtime=10s
go test -run=TestParallelBenchmarkSender -v
Location: token/core/fabtoken/v1/
BenchmarkVerificationSenderProofBenchmarkVerificationParallelSenderProofTestParallelBenchmarkVerificationSenderProofDeserialization and verification of transfer actions.
cd token/core/fabtoken/v1
go test -bench=BenchmarkVerificationSenderProof -benchtime=10s
go test -bench=BenchmarkVerificationParallelSenderProof -benchtime=10s
go test -run=TestParallelBenchmarkVerificationSenderProof -v
Location: token/core/fabtoken/v1/
BenchmarkIssuerComplete issue action creation from inputs to serialized output.
cd token/core/fabtoken/v1
go test -bench=BenchmarkIssuer -benchtime=10s
Location: token/core/fabtoken/v1/
BenchmarkProofVerificationIssuerDeserialization and verification of issue actions.
cd token/core/fabtoken/v1
go test -bench=BenchmarkProofVerificationIssuer -benchtime=10s
The Service Layer provides the highest level of abstraction for complete end-to-end operations through the Service APIs.
Location: token/core/fabtoken/v1/
BenchmarkTransferServiceTransferTestParallelBenchmarkTransferServiceTransferComplete end-to-end transfer operation generation through the high-level Transfer Service API.
cd token/core/fabtoken/v1
go test -bench=BenchmarkTransferServiceTransfer -benchtime=10s
go test -run=TestParallelBenchmarkTransferServiceTransfer -v
Location: token/core/fabtoken/v1/
BenchmarkIssueServiceIssueTestParallelBenchmarkIssueServiceIssueEnd-to-end issue operation generation through the high-level Issue Service API.
cd token/core/fabtoken/v1
go test -bench=BenchmarkIssueServiceIssue -benchtime=10s
go test -run=TestParallelBenchmarkIssueServiceIssue -v
Location: token/core/fabtoken/v1/
BenchmarkAuditorServiceCheckTestParallelBenchmarkAuditorServiceCheckEnd-to-end audit verification through the high-level Auditor Service API.
cd token/core/fabtoken/v1
go test -bench=BenchmarkAuditorServiceCheck -benchtime=10s
go test -run=TestParallelBenchmarkAuditorServiceCheck -v
Location: token/core/fabtoken/v1/validator/
BenchmarkValidatorTransferTestParallelBenchmarkValidatorTransferBenchmarkValidatorIssueTestParallelBenchmarkValidatorIssueComplete validation pipeline performance, including all signature and business logic checks.
cd token/core/fabtoken/v1/validator
go test -bench=BenchmarkValidatorTransfer -benchtime=10s
go test -run=TestParallelBenchmarkValidatorTransfer -v
go test -bench=BenchmarkValidatorIssue -benchtime=10s
go test -run=TestParallelBenchmarkValidatorIssue -v
Each layer tests a different code abstraction level independently:
Most layers include parallel test variants that run benchmarks concurrently:
Benchmark*Parallel: Go’s built-in parallel benchmarking (*testing.B)TestParallelBenchmark*: Custom parallel benchmarking framework (*testing.T)These help identify concurrency issues and measure performance under load.