Give a plugin a Postgres database of its own
This commit is contained in:
+16
-3
@@ -44,10 +44,11 @@ test("long-running Ory services declare readiness healthchecks", () => {
|
||||
`${svc} probes :${port}/health/ready`);
|
||||
});
|
||||
|
||||
test("web waits for kratos, keto and hydra to be healthy before starting", () => {
|
||||
test("web waits for kratos, keto, hydra and postgres to be healthy before starting", () => {
|
||||
assert.match(webBlock, /depends_on:/, "web declares dependencies");
|
||||
// hydra: the OAuth2 login/consent handler talks to its admin API.
|
||||
for (const svc of ["kratos", "keto", "hydra"])
|
||||
// hydra: the OAuth2 login/consent handler talks to its admin API. postgres: a plugin declaring
|
||||
// `storage` opens its connection in onBoot, before the server listens.
|
||||
for (const svc of ["kratos", "keto", "hydra", "postgres"])
|
||||
assert.match(webBlock, new RegExp(`${svc}:\\s*\\n\\s*condition:\\s*service_healthy`),
|
||||
`web waits for ${svc} healthy`);
|
||||
});
|
||||
@@ -78,6 +79,18 @@ test("prod base supplies the app secret via env and mounts no source; dev overri
|
||||
assert.match(compose, /POSTGRES_PASSWORD:\s*\$\{POSTGRES_PASSWORD\b/, "postgres password via env");
|
||||
});
|
||||
|
||||
test("the provisioning superuser DSN reaches bootstrap only, never web", () => {
|
||||
// web runs plugin code, which can read its own environment — so the credentials that may CREATE
|
||||
// DATABASE/ROLE must never be there. web gets the credential-free base URL and derives each
|
||||
// plugin's own password from the shared secret instead.
|
||||
const boot = compose.slice(compose.indexOf("\n bootstrap:"));
|
||||
const overrideWeb = override.slice(override.indexOf("\n web:"), override.indexOf("\n bootstrap:"));
|
||||
assert.match(boot, /PLUGIN_DB_ADMIN_URL:/, "bootstrap is given the superuser DSN");
|
||||
for (const [name, block] of [["base", webBlock], ["dev override", overrideWeb]] as const)
|
||||
assert.doesNotMatch(block, /PLUGIN_DB_ADMIN_URL/, `${name} web never sees it`);
|
||||
assert.match(webBlock, /PLUGIN_DB_URL:\s*\$\{PLUGIN_DB_URL/, "base wires web's base URL from env");
|
||||
});
|
||||
|
||||
test("a one-shot bootstrap seeds the stack before web starts", () => {
|
||||
// MVP bar: `bootstrap` runs after kratos+keto are healthy, seeds the admin +
|
||||
// JWKS, then exits; web waits for it to complete. Live seeding is boot-verified.
|
||||
|
||||
Reference in New Issue
Block a user