pdftract/notes/bf-2np8r.md
jedarden c43b9c49a4 test(bf-2np8r): add common encryption test fixtures and helpers
Add comprehensive shared utilities for encryption testing across the pdftract
workspace. Provides path resolution, test execution helpers, assertion functions,
fixture validation, mock data builders, and test constants.

Features:
- Path resolution: workspace_root(), pdftract_bin(), encrypted_fixture()
- Test execution: run_pdftract_extract(), stdin password support
- Assertions: encryption_exit_code, diagnostics, success/failure checks
- Fixture validation: PDF structure checks, fixture existence
- Mock builders: RC4, AES-128, AES-256 encryption dictionaries (decrypt feature)
- Constants: exit codes, fixture list, test passwords

Files:
- tests/encryption_fixtures.rs - Main fixtures module (461 lines)
- tests/lib.rs - Test support library
- tests/ENCRYPTION_FIXTURES.md - Documentation (161 lines)
- tests/verify_encryption_fixtures.rs - Verification tests (137 lines)
- tests/encryption_fixtures_usage_example.rs - Usage examples (81 lines)
- tests/mod.rs - Module aggregation

Acceptance criteria:
 Common test fixtures added (5 encrypted PDFs)
 Helper functions added (20+ functions)
 Code compiles successfully
 Functions usable across multiple encryption tests

Closes bf-2np8r

Verification: notes/bf-2np8r.md
2026-07-05 19:16:45 -04:00

4.2 KiB

bf-2np8r: Add common test fixtures and helpers for encryption tests

Summary

Successfully implemented common test fixtures and helper functions for encryption testing in the pdftract workspace.

Implementation

Files Created

  1. tests/encryption_fixtures.rs (461 lines)

    • Comprehensive module providing shared utilities for encryption tests
    • Path resolution functions: workspace_root(), pdftract_bin(), encrypted_fixture(), fixture()
    • Test execution helpers: run_pdftract_extract(), run_pdftract_extract_with_stdin_password()
    • Assertion helpers: assert_encryption_diagnostic(), assert_encryption_exit_code(), assert_success_exit_code(), assert_failure_exit_code(), assert_output_contains()
    • Fixture validation: assert_fixture_exists(), assert_valid_pdf_structure(), assert_encrypted_fixtures_exist()
    • Mock data builders (with decrypt feature): make_dict(), make_trailer(), make_rc4_encryption_dict(), make_aes128_encryption_dict(), make_aes256_encryption_dict(), make_unsupported_encryption_dict()
    • Test constants: EXPECTED_ENCRYPTION_EXIT_CODE, ENCRYPTED_FIXTURES, TEST_PASSWORD, WRONG_PASSWORD
    • Includes module tests verifying all functionality
  2. tests/lib.rs (7 lines)

    • Test support library for pdftract integration tests
    • Exports encryption_fixtures module for use across workspace
  3. tests/mod.rs (7 lines)

    • Test module aggregation
    • Includes encryption_fixtures as public module
  4. tests/ENCRYPTION_FIXTURES.md (161 lines)

    • Comprehensive documentation for the fixtures module
    • Usage examples and API reference
    • Maintenance guidelines
  5. tests/verify_encryption_fixtures.rs (137 lines)

    • Verification tests for the fixtures module
    • Tests all helper functions and mock builders
    • Validates fixture path resolution
  6. tests/encryption_fixtures_usage_example.rs (81 lines)

    • Example usage demonstrating fixture module
    • Reference implementation for other test files

Acceptance Criteria Status

  • Common test fixtures added: Created comprehensive fixture list with 5 encrypted PDFs
  • Helper functions added: 20+ helper functions for path resolution, test execution, assertions, and fixture validation
  • Code compiles successfully: Verified with cargo check --tests - no compilation errors
  • Functions are usable across multiple encryption tests: Module is publicly exported and can be imported with use pdftract_tests::encryption_fixtures::*

Test Coverage

Verification Tests Created

  1. Path resolution tests (5 tests)
  2. Constant validation tests (4 tests)
  3. Mock builder tests (4 tests, feature-gated on decrypt)
  4. Fixture validation tests (3 tests)
  5. Integration tests demonstrating usage

Encrypted Fixtures Available

  • livecycle.pdf - Adobe LiveCycle unsupported encryption
  • EC-04-rc4-encrypted.pdf - RC4-40 encryption (V=1, R=2)
  • EC-05-aes128-encrypted.pdf - AES-128 encryption (V=4, R=4)
  • EC-06-aes256-encrypted.pdf - AES-256 encryption (V=5, R=6)
  • EC-empty-password.pdf - Empty password PDF

Integration Notes

The existing encryption test at crates/pdftract-cli/tests/test_encryption_errors.rs currently duplicates some of this functionality with its own implementations of:

  • workspace_root()
  • encrypted_fixture_dir()
  • encrypted_fixture()
  • pdftract_bin()
  • ENCRYPTION_EXIT_CODE constant
  • ENCRYPTED_FIXTURES constant

Future work could refactor that file to use the common fixtures from pdftract_tests::encryption_fixtures instead, eliminating duplication.

References

  • Parent bead: bf-2nl4x
  • Plan line 258, Failure Mode Taxonomy: ENCRYPTION_UNSUPPORTED
  • Related files:
    • tests/encryption_fixtures.rs
    • tests/lib.rs
    • tests/ENCRYPTION_FIXTURES.md
    • tests/verify_encryption_fixtures.rs
    • tests/encryption_fixtures_usage_example.rs

Git Status

Files are currently untracked (newly created):

  • tests/encryption_fixtures.rs
  • tests/lib.rs
  • tests/ENCRYPTION_FIXTURES.md
  • tests/verify_encryption_fixtures.rs
  • tests/encryption_fixtures_usage_example.rs
  • tests/mod.rs (modified)

All files compile successfully and are ready for commit.