Skip to content

Testing your integration

Test with a non-production API key and the onboarding test environment. Use real devices and final packaged artifacts in addition to emulators or development runs.

ScenarioExpected result
Clean install, acceptVerified accepted result returns exactly one SDK instance
Clean install, declineNo instance; the current version remains declined
Close/cancel windowNo instance; deliberate retry remains possible
Invalid or malformed accepted decisionLocal error; no native handle
Expired decisionLocal error; no native handle
Decision for another API key or identityRejected; no native handle
Existing accepted state after restartWrapper restores the scoped decision and creates normally
Successful revokeLocal state becomes revoked and active instance closes
Failed revokeAccepted state and instance remain available for retry
  1. Attach lifecycle handlers before calling connect().
  2. Confirm connect() can return before the connected event.
  3. Wait for connected, then verify isOnline is true.
  4. Disable network access and capture the disconnected reason.
  5. Restore connectivity and confirm policy-driven reconnect without an application retry loop.
  6. Exercise DNS failure, TLS interception, proxy/firewall restrictions, and inaccurate device time in the test environment.
  7. Confirm low-battery behavior does not trigger a competing manual reconnect loop.
  • Repeated start requests must not create unowned duplicate peers.
  • Disconnect while connecting must leave the wrapper responsive.
  • Final close/free/dispose must be idempotent at the application owner boundary even if only invoked once on the SDK.
  • No callback may use UI or managed state after terminal release.
  • Native applications must not free a handle during another call or callback.
PlatformRequired tests
AndroidForeground/minimized, screen off, notification denied, OS-rejected service start, force-stop
iOSBackground/foreground, device lock, suspension, termination, low battery
ElectronAll windows closed with background mode on/off, force quit, sleep/resume
Node.jsSignal shutdown, parent supervisor restart, system sleep
WindowsMinimize, hide/show, lock, sleep/resume, process exit
LinuxDaemon/service lifecycle owned by the host, signals, process exit

Create a minimal clean application outside the SDK repository, install only the delivered package, build a release artifact, and launch it from the final directory. This catches accidental dependencies on source-tree files, environment variables, or development library paths.

  • Search source maps, logs, crash reports, and packaged configuration for receipts, tokens, private keys, and registry credentials.
  • Confirm Electron renderer code cannot import native packages.
  • Confirm Android/iOS/WPF cannot create an instance by passing a boolean around the SDK-owned consent UI.
  • Verify debug mode is disabled in release configuration.

An integration is ready only when the platform matrix, consent/revoke flow, network interruption, final shutdown, and sanitized telemetry all pass using the exact artifacts intended for release.