ic-testkit 0.0.1

PocketIC-oriented test utilities for IC canister tests
Documentation
# ic-testkit

Reusable PocketIC-oriented test utilities for IC canister tests.

Use this crate when you want generic host-side test infrastructure that can be
shared across IC canister projects.

Toolchains:
- MSRV: Rust 1.88
- internal build/test lane: Rust 1.95

What it adds over raw `pocket-ic`:
- a narrower `Pic` wrapper that exposes the PocketIC operations this crate
  supports as a stable test surface
- typed startup errors for common PocketIC launch failures, including missing
  binaries, invalid binaries, failed downloads, server startup failures, and
  startup timeouts
- a cross-process `PicSerialGuard` for test suites that need to serialize
  PocketIC usage and avoid shared server/resource exhaustion
- Candid `update_call` and `query_call` helpers that encode arguments, decode
  results, and preserve useful canister/method context on failures
- generic create/install helpers for caller-provided wasm modules and init bytes
- install-code rate-limit retry helpers that advance PocketIC time between
  attempts
- canister diagnostics that dump status and logs for failed test paths
- standalone prebuilt-wasm fixtures that own their `Pic`, canister id, and
  serialization guard together
- cached baseline primitives that snapshot canisters once and restore them
  between tests, rebuilding automatically when a cached PocketIC instance dies
- controller snapshot helpers for capture/restore flows that need sender
  fallbacks
- deterministic fake principals and ledger-style accounts for reproducible tests
- wasm artifact path, readiness, build, and read helpers for host-side test
  harnesses
- watched-input freshness checks for generated `.icp` artifacts
- workspace target-directory helpers for crates living at a workspace root or
  under `crates/`

Current API shape:
- `Pic` is the intentional host-side wrapper surface for PocketIC calls used by this crate
- cached baseline guards expose explicit accessors instead of transparently derefing into raw `PocketIc`
- tests should prefer the wrapper methods and fixture helpers here instead of reaching through to the underlying PocketIC client directly

What it intentionally does not own:
- application init payloads, role names, or endpoint method constants
- application-specific readiness polling
- product-specific canister fixture graphs
- attestation-specific fixture policy
- repo-only audit probes
- broad self-test orchestration

If you are writing downstream PocketIC tests, start here.
If you are editing application-specific integration harnesses, keep that code
in the owning application repo instead of widening this generic surface.