Files
tribes-plugin-supertest/README.md
T
self 99a7d68125 test: add supertest docker e2e suite
Add a plugin-owned Docker e2e image and compose runner for the supertest plugin. The suite validates plugin loading, local plugin APIs, plugin.call, origin-to-peer resource sync, and cluster PubSub behavior against a Tribes release with the plugin installed.

Broaden loopback detection so local-only plugin API calls work from Docker's IPv4-mapped loopback addresses.
2026-05-13 17:44:11 +02:00

1.6 KiB

tribes-plugin-supertest

Migration and sync fixture plugin for Tribes supertest scenarios.

This plugin is intentionally small and boring. It exists so live rollout tests can validate behavior that Aether does not cover:

  • plugin-owned Ash resources
  • AshNostrSync registration for plugin domains
  • reversible plugin database migrations
  • plugin-owned JSON API access from the infra runner

Runtime surface

The plugin exposes a local-only JSON API under /plugins-api/supertest:

  • GET /health
  • GET /schema
  • POST /reset
  • POST /cases
  • POST /cases/:id/increment
  • POST /events
  • GET /state?run_id=...

The API rejects non-loopback requests. Supertest calls it over SSH with curl against 127.0.0.1:4000 on each node.

Resources

  • Supertest.Case
  • Supertest.Event

Both resources are backed by Tribes.Repo, use AshPostgres.DataLayer, and participate in AshNostrSync.

Development

Use the host-backed plugin helper:

devenv shell plugin validate
devenv shell plugin test
devenv shell plugin precommit

Plain mix test and mix precommit are guarded because this suite expects the host plugin test environment. Use mix raw_test / mix raw_precommit only for low-level debugging after setting the same host environment yourself.

Docker e2e

The Docker e2e suite builds a Tribes host release with tribes_ui and supertest, starts two nodes, runs plugin migrations, and verifies plugin-owned AshNostrSync resources across the cluster:

scripts/run_docker_e2e.sh

Set TRIBES_HOST_ROOT=/path/to/tribes when the host checkout is not at ../tribes.